www.pudn.com > 200589952618.rar > mainformpas.pas
unit mainformpas;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, IdBaseComponent, IdComponent, IdTCPServer,
mytype, myconst, DB, ADODB, Menus, WinSkinData;
type
TForm1 = class(TForm)
IdTCPServer1: TIdTCPServer;
online_ListView: TListView;
ADOQuery1: TADOQuery;
ADOConnection1: TADOConnection;
MainMenu1: TMainMenu;
File1: TMenuItem;
Exit1: TMenuItem;
About1: TMenuItem;
About2: TMenuItem;
SkinData: TSkinData;
procedure IdTCPServer1Execute(AThread: TIdPeerThread);
procedure FormCreate(Sender: TObject);
procedure IdTCPServer1Disconnect(AThread: TIdPeerThread);
procedure Exit1Click(Sender: TObject);
procedure About2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
mainctrl: Tctrl;
implementation
uses
About;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
mainctrl := Tctrl.Create;
InitializeCriticalSection(mainctrl.cs);
ADOConnection1.Connected := true;
mainctrl.onlineview := online_ListView;
mainctrl.IdTCPServer := IdTCPServer1;
mainctrl.adoquery := ADOQuery1;
SkinData.SkinFile := 'skins\skin0000.skn';
SkinData.Active := True;
end;
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
userdata: Ruserdata;
ctext: Rcommandtext;
mestext: Rtextdata;
i, j: integer;
st: string;
begin
AThread.Connection.ReadBuffer(ctext, sizeof(ctext));
case ctext.command of
Clogin:
begin
AThread.Connection.ReadBuffer(userdata, sizeof(userdata));
st := mainctrl.login(userdata);
if st <> '用户名或密码不符。' then
begin
AThread.Connection.WriteLn(st);
userdata.IP := AThread.Connection.Socket.Binding.peerip;
userdata.post := AThread.Connection.Socket.Binding.peerport;
userdata.AThread := AThread;
mainctrl.addonline(userdata);
mainctrl.sendallonline(AThread);
end
else AThread.Connection.WriteLn(st);
end;
Creg:
begin
AThread.Connection.ReadBuffer(userdata, sizeof(userdata));
st := mainctrl.reg(userdata);
AThread.Connection.WriteLn(st);
end;
Csendtext:
begin
AThread.Connection.ReadBuffer(mestext, sizeof(mestext));
mainctrl.sendtext(ctext, mestext);
end;
Cmodiwhatdoing:
begin
AThread.Connection.ReadBuffer(userdata, sizeof(userdata));
mainctrl.modiwhatdoing(ctext, userdata);
end;
Cstart:
begin
AThread.Connection.ReadBuffer(userdata, sizeof(userdata));
userdata.AThread.Connection.WriteBuffer(ctext, sizeof(ctext));
for i := 0 to high(mainctrl.online) do
begin
if mainctrl.online[i].AThread.handle = AThread.handle then
begin
j := i;
userdata.AThread.Connection.WriteBuffer(mainctrl.online[i], sizeof(mainctrl.online[i]));
end;
end;
ctext.command := Cmodiwhatdoing;
ctext.num := 2;
mainctrl.modiwhatdoing(ctext, userdata);
mainctrl.modiwhatdoing(ctext, mainctrl.online[j]);
end;
Cok:
begin
AThread.Connection.ReadBuffer(userdata, sizeof(userdata));
userdata.AThread.Connection.WriteBuffer(ctext, sizeof(ctext));
for i := 0 to high(mainctrl.online) do
begin
if mainctrl.online[i].AThread.handle = AThread.handle then
begin
userdata.AThread.Connection.WriteBuffer(mainctrl.online[i], sizeof(mainctrl.online[i]));
end;
end;
end;
Clogout:
begin
AThread.Connection.ReadBuffer(userdata, sizeof(userdata));
userdata.AThread.Connection.WriteBuffer(ctext, sizeof(ctext));
for i := 0 to high(mainctrl.online) do
begin
if mainctrl.online[i].AThread.handle = AThread.handle then
begin
userdata.AThread.Connection.WriteBuffer(mainctrl.online[i], sizeof(mainctrl.online[i]));
end;
end;
ctext.command := Cmodiwhatdoing;
ctext.num := 1;
mainctrl.modiwhatdoing(ctext, userdata);
end;
Crefuse:
begin
AThread.Connection.ReadBuffer(userdata, sizeof(userdata));
userdata.AThread.Connection.WriteBuffer(ctext, sizeof(ctext));
for i := 0 to high(mainctrl.online) do
begin
if mainctrl.online[i].AThread.handle = AThread.handle then
begin
j := i;
userdata.AThread.Connection.WriteBuffer(mainctrl.online[i], sizeof(mainctrl.online[i]));
end;
end;
ctext.command := Cmodiwhatdoing;
ctext.num := 1;
mainctrl.modiwhatdoing(ctext, userdata);
mainctrl.modiwhatdoing(ctext, mainctrl.online[j]);
end;
Cenemystart:
begin
AThread.Connection.ReadBuffer(userdata, sizeof(userdata));
userdata.AThread.Connection.WriteBuffer(ctext, sizeof(ctext));
for i := 0 to high(mainctrl.online) do
begin
if mainctrl.online[i].AThread.handle = AThread.handle then
begin
userdata.AThread.Connection.WriteBuffer(mainctrl.online[i], sizeof(mainctrl.online[i]));
end;
end;
end;
Cready:
begin
AThread.Connection.ReadBuffer(userdata, sizeof(userdata));
userdata.AThread.Connection.WriteBuffer(ctext, sizeof(ctext));
for i := 0 to high(mainctrl.online) do
begin
if mainctrl.online[i].AThread.handle = AThread.handle then
begin
userdata.AThread.Connection.WriteBuffer(mainctrl.online[i], sizeof(mainctrl.online[i]));
end;
end;
end;
Cover:
begin
AThread.Connection.ReadBuffer(userdata, sizeof(userdata));
userdata.AThread.Connection.WriteBuffer(ctext, sizeof(ctext));
for i := 0 to high(mainctrl.online) do
begin
if mainctrl.online[i].AThread.handle = AThread.handle then
begin
userdata.AThread.Connection.WriteBuffer(mainctrl.online[i], sizeof(mainctrl.online[i]));
end;
end;
end;
Cdraw:
begin
AThread.Connection.ReadBuffer(userdata, sizeof(userdata));
userdata.AThread.Connection.WriteBuffer(ctext, sizeof(ctext));
for i := 0 to high(mainctrl.online) do
begin
if mainctrl.online[i].AThread.handle = AThread.handle then
begin
mainctrl.online[i].Rbg := userdata.Rbg;
mainctrl.online[i].Rfg := userdata.Rfg;
userdata.AThread.Connection.WriteBuffer(mainctrl.online[i], sizeof(mainctrl.online[i]));
end;
end;
end;
end; //case
end;
procedure TForm1.IdTCPServer1Disconnect(AThread: TIdPeerThread);
begin
mainctrl.deleonline(AThread);
end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
Application.Terminate;
end;
procedure TForm1.About2Click(Sender: TObject);
begin
application.CreateForm(TFAbout,FAbout);
FAbout.Show;
end;
end.