www.pudn.com > Roulette.rar > rltClient.pas


unit rltClient; 
 
interface 
uses  TltConst, SConnect, Forms, ClientInterpreter, SysUtils, Classes, rltgame, IniFiles; 
type 
  TrltConnect = class(TSocketConnection) 
  private 
    FInterpreter : TCustomDataBlockInterpreter; 
  protected 
    ErrorCode : integer; 
    procedure DoError(E: Exception); override; 
  public 
    function GetInterpreter: TCustomDataBlockInterpreter; override; 
    function GetLastError:integer; 
  end; 
  TrltClient = class(TComponent) 
  public 
    constructor Create(AOwner: TComponent); override; 
    function PlayerIndex(ID : String) : integer; 
// 
    function LoginPlayer(APlayer : TPlayer):boolean; 
    procedure LogoffPlayer(ID : String); 
// 
    procedure KillPlayer(ID : String); 
  private 
  end; 
var 
  Client : TrltClient; 
  RltConnection : TrltConnect;    //连接 
  TltInterpreter : TrltClientInterpreter;//数据解析器 
 
 
 
  function init(): boolean; 
  function finit(): boolean ; 
 
implementation 
 
function init():boolean; 
var 
  IniFile : TIniFile; 
begin 
  //初始化网络 
 
  IniFile :=  TIniFile.Create(ExtractFilePath(Application.ExeName)+'roulette.ini'); 
 
  RltConnection := TrltConnect.Create(Application); 
  RltConnection.Address := IniFile.ReadString('sys','ip','127.0.0.1'); 
  RltConnection.Port := IniFile.ReadInteger('sys','port',8080); 
  result := true; 
  IniFile.Free; 
end ; 
function finit(): boolean ; 
begin 
  TltInterpreter.Free; 
//  SConnection.Free; 
  result := true; 
end; 
{ TrltClient } 
 
constructor TrltClient.Create(AOwner: TComponent); 
begin 
  inherited; 
end; 
 
 
procedure TrltClient.KillPlayer(ID: String); 
var 
  Index : integer; 
begin 
  Index := PlayerIndex(ID); 
  if Index>=0 then 
  begin 
    PlayerPanel[Index].State := ppsNoBody; 
    PlayerPanel[Index].UserName := ''; 
    PlayerPanel[Index].Password := ''; 
    Players[Index].UserID := ''; 
    Players[Index].Password := ''; 
    Players[Index].money := 0; 
    Players[Index].ClearBets; 
  end; 
end; 
 
function TrltClient.LoginPlayer(APlayer: TPlayer): boolean; 
begin 
 
end; 
 
procedure TrltClient.LogoffPlayer(ID: String); 
var 
  Index : integer; 
begin 
  Index := PlayerIndex(ID); 
  if Index>=0 then 
  begin 
//    Player[Index].ke 
 
    KillPlayer(ID); 
  end; 
end; 
 
function TrltClient.PlayerIndex(ID: String): integer; 
var 
  I : integer; 
begin 
  Result := -1; 
  for I := 0 to Length(Players) do 
  begin 
    if Players[I].UserID = ID then 
    begin 
      Result := I; 
      Break; 
    end; 
  end; 
 
end; 
 
{ TrltConnect } 
 
procedure TrltConnect.DoError(E: Exception); 
begin 
//  inherited; 
  ErrorCode := -1; 
end; 
 
function TrltConnect.GetInterpreter: TCustomDataBlockInterpreter; 
begin 
  if not Assigned(FInterpreter) then 
    FInterpreter := TrltClientInterpreter.Create(Self, SSockets); 
  Result := FInterpreter; 
end; 
 
function TrltConnect.GetLastError: integer; 
begin 
  Result := ErrorCode; 
  ErrorCode := 0; 
end; 
 
initialization 
  Client := TrltClient.Create(nil); 
finalization 
  Client.Free; 
 
end.