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.