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


unit TltLogic; 
{Tlt logic layer} 
interface 
uses Classes, SConnectEx, TltConst, ExtCtrls, Forms, Dialogs, SysUtils, SyncObjs; 
type 
  TServerInfo = record 
    ServerVer : String[255]; 
  end; 
 
  TrltServerInterpreter = class(TDataBlockInterpreter) 
 
 
    FClient : Pointer; 
    FCriticalSection : TCriticalSection; 
 
    procedure CallProc(Proc : TClientProc); 
    function DoCustomAction(Action: Integer; const Data: IDataBlock): Boolean; override; 
  public 
    {Receiving Calls} 
    procedure DoGetServerInfo(const Data: IDataBlock); 
    procedure DoGetCurrentRound(const Data: IDataBlock); 
    procedure DoGetTimeSetting(const Data: IDataBlock); 
    procedure DoLoginPlayer(const Data: IDataBlock); 
    procedure DoLogoffPlay(const Data: IDataBlock); 
    procedure DoGetPlayerInfo(const Data: IDataBlock); 
    procedure DoBet(const Data: IDataBlock); 
    procedure DoGetScore(const Data: IDataBlock); 
    procedure DoGetWheelParams(const Data: IDataBlock); 
    procedure DoGetRoundInfo(const Data: IDataBlock); 
    procedure DoPlayerEdit(const Data:IDataBlock); 
    procedure DoGetPlayerList(const Data: IDataBlock); 
    procedure DoSetRoundResult(const Data: IDataBlock); 
    procedure DoGetGameParams(const Data: IDataBlock); 
    procedure DoSetGameParams(const Data: IDataBlock); 
    procedure DoGetRoundState(const Data: IDataBlock); 
    procedure DoSetRoundState(const Data: IDataBlock); 
    procedure DoGetRoundScordInfo(const Data: IDataBlock); 
    procedure DoUploadPlayerList(const Data: IDataBlock); 
    procedure DoGetRoundInfoLog(const Data: IDataBlock); 
    procedure DoGetPlayerBetInfoLog(const Data: IDataBlock); 
    procedure DoClearRoundInfoLog(const Data: IDataBlock); 
    procedure DoClearPlayerBetInfoLog(const Data: IDataBlock); 
    procedure DoClearPlayerList(const Data: IDataBlock); 
    procedure DoCheckAdmin(const Data: IDataBlock); 
    procedure DoLock(const Data: IDataBlock); 
    {Sending Calls} 
    function CallGetServerInfo : TServerInfo; 
    function CallGetCurrentRoundNo: integer; 
    {Sendto Client} 
    procedure CallSetCountDown; 
    procedure CallSetTimeSetting; 
    procedure CallSetRound; 
    procedure CallSetWheelResult; 
    procedure CallSetPlayerInfo(APlayer : TObject); 
    procedure CallSetWheelParams(WheelParams : TWheelParams); 
    procedure CallLogout(PlayerID: String); 
    procedure DoException(const Data: IDataBlock); override; 
    constructor Create(SendDataBlock: ISendDataBlock; 
      CheckRegValue: String); override; 
    destructor Destroy; override; 
  end; 
 
 
 
 
implementation 
uses ScktCnst, rltSvr; 
 
 
{ TTltInterpreter } 
 
function TrltServerInterpreter.CallGetServerInfo: TServerInfo; 
var 
  Data: IDataBlock; 
  Size : integer; 
  s : TServerInfo; 
begin 
  Data := TDataBlock.Create as IDataBlock; 
  Data.Signature := CallSig or asGetServerInfo; 
  Data := FSendDataBlock.Send(Data, True); 
  Data.Read(size, sizeof(size)); 
  Data.Read(s,Size); 
  Result := s; 
//  Result := ReadVariant(Flags, Data); 
end; 
 
function TrltServerInterpreter.CallGetCurrentRoundNo: integer; 
var 
  Data: IDataBlock; 
  Size : integer; 
  s : integer; 
begin 
  FCriticalSection.Enter; 
  try 
    Data := TDataBlock.Create as IDataBlock; 
    Data.Signature := CallSig or asGetCurrentRound; 
    Data := FSendDataBlock.Send(Data, True); 
    Data.Read(size, sizeof(size)); 
    Data.Read(s,Size); 
    Result := s; 
  finally 
    FCriticalSection.Leave; 
  end; 
//  Result := ReadVariant(Flags, Data); 
end; 
 
 
function TrltServerInterpreter.DoCustomAction(Action: Integer; 
  const Data: IDataBlock): Boolean;  
begin 
  FCriticalSection.Enter; 
  try 
    case (Action and asMask) of 
      asGetServerInfo: DoGetServerInfo(Data); 
      asGetCurrentRound : DoGetCurrentRound(Data); 
      asTimeSetting : DoGetTimeSetting(Data); 
      asLoginPlayer : DoLoginPlayer(Data); 
      asLogoffPlayer : DoLogoffPlay(Data); 
      asPlayerInfo : DoGetPlayerInfo(Data); 
      asBet : DoBet(Data); 
      asGetRoundScord : DoGetScore(Data); 
      asWheelParams : DoGetWheelParams(Data); 
      asGetRoundInfo : DoGetRoundInfo(Data); 
      asPlayerEdit : DoPlayerEdit(Data); 
      asPlayerList : DoGetPlayerList(Data); 
      asSetRoundResult : DoSetRoundResult(Data); 
      asGetGameParams : DoGetGameParams(Data); 
      asSetGameParams : DoSetGameParams(Data); 
      asGetRoundState : DoGetRoundState(Data); 
      asSetRoundState : DoSetRoundState(Data); 
      asUploadPlayerList : DoUploadPlayerList(Data); 
      asGetRoundLog : DoGetRoundInfoLog(Data); 
      asGetPlayerBetLog : DoGetPlayerBetInfoLog(Data); 
      asClearPlayerList : DoClearPlayerList(Data); 
      asClearPlayerBetLog : DoClearPlayerBetInfoLog(Data); 
      asClearGameLog : DoClearRoundInfoLog(Data); 
      asCheckAdmin : DoCheckAdmin(Data); 
      asLockServer : DoLock(Data); 
      1 :; 
    else 
      Result := false; 
    end; 
  finally 
    FCriticalSection.Leave; 
  end; 
end; 
 
procedure TrltServerInterpreter.DoGetServerInfo(const Data: IDataBlock); 
var 
  ServerInfo : TServerInfo; 
  VarSize : integer; 
begin 
  Data.Clear; 
  try 
    ServerInfo.ServerVer :='1.0'; 
  finally 
  end; 
  VarSize := sizeof(ServerInfo); 
  Data.Write(VarSize, sizeof(integer)); 
  Data.Write(ServerInfo, VarSize); 
  Data.Signature := ResultSig or asGetServers; 
  FSendDataBlock.Send(Data, False); 
end; 
 
procedure TrltServerInterpreter.DoGetCurrentRound(const Data: IDataBlock); 
var 
  Size : integer; 
begin 
  Data.Clear; 
  Size := SizeOf(TRound); 
  Data.Write(Size, SizeOf(Size)); 
  Data.Write(rltManager.Round,Size); 
  Data.Signature := ResultSig or asGetCurrentRound; 
  FSendDataBlock.Send(Data, False); 
end; 
 
 
procedure TrltServerInterpreter.CallSetCountDown; 
var 
  Data: IDataBlock; 
  Size : integer; 
  s : integer; 
begin 
  FCriticalSection.Enter; 
  try 
    Data := TDataBlock.Create as IDataBlock; 
    WriteVariant(rltManager.CountDown, Data); 
    Data.Signature := CallSig or asSetCountDown; 
 
    Data := FSendDataBlock.Send(Data, false); 
  finally 
    FCriticalSection.Leave; 
  end; 
end; 
 
procedure TrltServerInterpreter.CallProc(Proc: TClientProc); 
begin 
  if Assigned(Proc) then 
  begin 
    Proc; 
  end; 
 
end; 
 
procedure TrltServerInterpreter.CallSetTimeSetting; 
var 
  Data: IDataBlock; 
  Size : integer; 
  s : integer; 
begin 
  FCriticalSection.Enter; 
  try 
    Data := TDataBlock.Create as IDataBlock; 
    Size := Sizeof(rltManager.TimeSetting); 
    Data.Write(Size, Sizeof(Size)); 
    Data.Write(rltManager.TimeSetting, Size); 
    Data.Signature := CallSig or asTimeSetting; 
    Data := FSendDataBlock.Send(Data, false); 
  finally 
    FCriticalSection.Leave; 
  end; 
end; 
 
procedure TrltServerInterpreter.CallSetRound; 
var 
  Data: IDataBlock; 
  Size : integer; 
  s : integer; 
begin 
  FCriticalSection.Enter; 
  try 
    Data := TDataBlock.Create as IDataBlock; 
    Size := Sizeof(rltManager.Round); 
    Data.Write(Size, Sizeof(Size)); 
    Data.Write(rltManager.Round, Size); 
    Data.Signature := CallSig or asSetRound; 
    Data := FSendDataBlock.Send(Data, false); 
  finally 
    FCriticalSection.Leave;   
  end; 
end; 
 
procedure TrltServerInterpreter.DoGetTimeSetting(const Data: IDataBlock); 
var 
  Size : integer; 
  s : integer; 
begin 
  Size := Sizeof(rltManager.TimeSetting); 
  Data.Write(Size, Sizeof(Size)); 
  Data.Write(rltManager.TimeSetting, Size); 
  Data.Signature := ResultSig or asTimeSetting; 
  FSendDataBlock.Send(Data, false); 
end; 
 
procedure TrltServerInterpreter.DoException(const Data: IDataBlock); 
begin 
//  inherited; 
  //do nothing; 
 
end; 
 
procedure TrltServerInterpreter.DoLoginPlayer(const Data: IDataBlock); 
var 
  Size : integer; 
  s : integer; 
  PlayerID : String; 
  Password : String; 
  VarFlag : TVarFlags; 
  ResultValue : Boolean; 
begin 
  PlayerID := ReadVariant(VarFlag, Data); 
  Password := ReadVariant(VarFlag, Data); 
  ResultValue := rltManager.LoginPlayer(PlayerID, password, TTltClient(FClient)); 
  Data.Clear; 
  WriteVariant(ResultValue, Data); 
  Data.Signature := ResultSig or asLoginPlayer; 
  FSendDataBlock.Send(Data, false); 
end; 
 
procedure TrltServerInterpreter.DoLogoffPlay(const Data: IDataBlock); 
var 
  Size : integer; 
  s : integer; 
  PlayerID : String; 
  Password : String; 
  VarFlag : TVarFlags; 
  ResultValue : Boolean; 
begin 
  PlayerID := ReadVariant(VarFlag, Data); 
  rltManager.LogoffPlayer(PlayerID); 
  Data.Clear; 
  WriteVariant(true, Data); 
  Data.Signature := ResultSig or asLogOffPlayer; 
  FSendDataBlock.Send(Data, false); 
end; 
 
constructor TrltServerInterpreter.Create(SendDataBlock: ISendDataBlock; 
  CheckRegValue: String); 
begin 
  inherited; 
  FClient := Pointer(TTltClient.Create(rltManager)); 
  TTltClient(FClient).Interpreter := Self; 
  FCriticalSection := TCriticalSection.Create; 
end; 
 
procedure TrltServerInterpreter.DoGetPlayerInfo(const Data: IDataBlock); 
var 
  Size : integer; 
  s : integer; 
  Player : TPlayer; 
  PlayerID : String; 
  VarFlag : TVarFlags; 
  PlayerInfo : TPlayerInfo; 
begin 
  PlayerID := ReadVariant(VarFlag, Data); 
  Data.Clear; 
  Player := rltManager.GetPlayerByID(PlayerID); 
  if Player <> nil then PlayerInfo := Player.GetPlayerInfo 
  else 
  begin 
    PlayerInfo.ID := PlayerID; 
    PlayerInfo.money := 0; 
    PlayerInfo.State := psLoginError; 
  end; 
  Size := sizeof(PlayerInfo); 
  Data.Write(Size, Sizeof(Size)); 
  Data.Write(PlayerInfo, size); 
  Data.Signature := ResultSig or asPlayerInfo; 
  FSendDataBlock.Send(Data, false); 
 
end; 
 
destructor TrltServerInterpreter.Destroy; 
begin 
  TTltClient(FClient).Free; 
  FCriticalSection.Free;   
  inherited; 
end; 
 
procedure TrltServerInterpreter.DoBet(const Data: IDataBlock); 
var 
  Size : integer; 
  s : integer; 
  Player : TPlayer; 
  PlayerID : String; 
  VarFlag : TVarFlags; 
  Result : boolean; 
  RBet, BBet, GBet:longint; 
begin 
  PlayerID := ReadVariant(VarFlag, Data); 
  RBet := ReadVariant(VarFlag, Data); 
  BBet := ReadVariant(VarFlag, Data); 
  GBet := ReadVariant(VarFlag, Data); 
  Data.Clear; 
  Result := false; 
  Player := rltManager.GetPlayerByID(PlayerID); 
  if Player <> nil then 
  begin 
    Result := true; 
    if (RBet + BBet + GBet)>Player.Money then 
    begin 
      Result := false; 
      with Player do 
      begin 
        RBet := Player.Bet[btRed]; 
        BBet := Player.Bet[btBlack]; 
        GBet := Player.Bet[btGreen]; 
      end; 
 
    end 
    else 
    begin 
      with Player do 
      begin 
        Player.Bet[btRed] := RBet; 
        Player.Bet[btBlack] := BBet; 
        Player.Bet[btGreen]:= GBet; 
      end; 
    end; 
  end 
  else 
  begin 
    Result := false; 
  end; 
  WriteVariant(PlayerID, Data); 
  WriteVariant(Result, Data); 
  WriteVariant(RBet, Data); 
  WriteVariant(BBet, Data); 
  WriteVariant(GBet, Data); 
  Data.Signature := ResultSig or asBet; 
  FSendDataBlock.Send(Data, false); 
end; 
 
procedure TrltServerInterpreter.CallSetWheelResult; 
var 
  Data: IDataBlock; 
  Size : integer; 
  s : integer; 
begin 
  FCriticalSection.Enter; 
  try 
    Data := TDataBlock.Create as IDataBlock; 
    WriteVariant(rltManager.WheelResult, Data); 
    Data.Signature := CallSig or asWheelResult; 
    Data := FSendDataBlock.Send(Data, false); 
  finally 
    FCriticalSection.Leave; 
  end; 
end; 
 
procedure TrltServerInterpreter.CallSetPlayerInfo(APlayer: TObject); 
var 
  Data: IDataBlock; 
  Size : integer; 
  s : integer; 
  PlayerID : String; 
  VarFlag : TVarFlags; 
  PlayerInfo : TPlayerInfo; 
begin 
  FCriticalSection.Enter; 
  try 
    Data := TDataBlock.Create as IDataBlock; 
    with TPlayer(APlayer) do 
    begin 
      PlayerInfo := GetPlayerInfo; 
      Size := sizeof(PlayerInfo); 
      Data.Write(Size, Sizeof(Size)); 
      Data.Write(PlayerInfo, size); 
      Data.Signature := CallSig or asPlayerInfo; 
      Data := FSendDataBlock.Send(Data, false); 
    end; 
  finally 
    FCriticalSection.Leave; 
  end; 
end; 
 
procedure TrltServerInterpreter.DoGetScore(const Data: IDataBlock); 
var 
  Size : integer; 
  s : integer; 
  PlayerID : String; 
  VarFlag : TVarFlags; 
  RoundNo, WheelNo : integer; 
begin 
  RoundNo := ReadVariant(VarFlag, Data); 
  WheelNo := ReadVariant(VarFlag, Data); 
  Data.Clear; 
  Size := sizeof(TRoundScord); 
  Data.Write(Size, Sizeof(Size)); 
  Data.Write(rltManager.RoundScords[RoundNo], size); 
  Data.Signature := ResultSig or asGetRoundScord; 
  FSendDataBlock.Send(Data, false); 
end; 
 
procedure TrltServerInterpreter.DoGetWheelParams(const Data: IDataBlock); 
var 
  Size : integer; 
  s : integer; 
  PlayerID : String; 
  VarFlag : TVarFlags; 
  RoundNo, WheelNo : integer; 
begin 
  Data.Clear; 
  rltManager.UpDateWheelParams; 
  Size := sizeof(TWheelParams); 
  Data.Write(Size, Sizeof(Size)); 
  Data.Write(rltManager.WheelParams, size); 
  Data.Signature := ResultSig or asWheelParams; 
  FSendDataBlock.Send(Data, false); 
end; 
 
procedure TrltServerInterpreter.CallSetWheelParams( 
  WheelParams: TWheelParams); 
var 
  Data: IDataBlock; 
  Size : integer; 
  VarFlag : TVarFlags; 
 
begin 
  FCriticalSection.Enter; 
  try 
    Data := TDataBlock.Create as IDataBlock; 
    Size := sizeof(TWheelParams); 
    Data.Write(Size, Sizeof(Size)); 
    Data.Write(WheelParams, size); 
    Data.Signature := CallSig or asWheelParams; 
    Data := FSendDataBlock.Send(Data, false); 
  finally 
    FCriticalSection.Leave; 
  end; 
end; 
 
type 
  TArrayInteger = array of integer; 
  PArrayInteger = ^TArrayInteger; 
 
procedure TrltServerInterpreter.DoGetRoundInfo(const Data: IDataBlock); 
var 
  Size : integer; 
  s : integer; 
  PlayerID : String; 
  VarFlag : TVarFlags; 
  RoundNo, WheelNo : integer; 
  RoundInfo : TRoundInfo; 
  ExpectedValue :array[TBetType] of longint; 
 
begin 
  Data.Clear; 
  FillChar(RoundInfo, sizeof(RoundInfo), #0); 
 
  RoundInfo.CurrentRound := rltManager.Round; 
  move( rltManager.BetCount,RoundInfo.CurrentBetCount, sizeof(rltManager.BetCount)); 
//  RoundInfo.CurrentBetCount[0] := rltManager.BetCount[btRed]; 
//  RoundInfo.CurrentBetCount[1] := rltManager.BetCount[btBlack]; 
//  RoundInfo.CurrentBetCount[2] := rltManager.BetCount[btGreen]; 
  RoundInfo.TotalBetCount[0] :=0; 
  RoundInfo.TotalBetCount[1] := 0; 
  RoundInfo.TotalBetCount[2] := 0; 
  with rltManager do 
  begin 
    ExpectedValue[btRed] := - BetCount[btRed] + BetCount[btBlack] + BetCount[btGreen]; 
    ExpectedValue[btBlack] :=  BetCount[btRed] - BetCount[btBlack] + BetCount[btGreen]; 
    ExpectedValue[btGreen] :=  BetCount[btRed] + BetCount[btBlack] - BetCount[btGreen] * 35; 
  end; 
 
  RoundInfo.WillValue[0] := ExpectedValue[btRed]; 
  RoundInfo.WillValue[1] := ExpectedValue[btBlack]; 
  RoundInfo.WillValue[2] := ExpectedValue[btGreen]; 
  RoundInfo.WillResult := rltManager.Round.WheelResult; 
  RoundInfo.MaxBetCount[0] := 0; 
  RoundInfo.MaxBetCount[1] := 0; 
  RoundInfo.MaxBetCount[2] := 0; 
  RoundInfo.ObjectValue := rltManager.ObjectValue; 
  RoundInfo.TotalValue := rltManager.TotalValue; 
  if RoundInfo.CurrentRound.No+RoundInfo.CurrentRound.WheelNo>2 then 
  begin 
    if RoundInfo.CurrentRound.WheelNo=1 then 
      RoundInfo.OldResult := rltManager.RoundScords[RoundInfo.CurrentRound.No-1].Number[50] 
    else 
      RoundInfo.OldResult := 
        rltManager.RoundScords[RoundInfo.CurrentRound.No].Number[RoundInfo.CurrentRound.WheelNo-1]; 
  end; 
  Size := sizeof(TRoundInfo); 
  Data.Write(Size, Sizeof(Size)); 
  Data.Write(RoundInfo, size); 
  Data.Signature := ResultSig or asGetRoundInfo; 
  FSendDataBlock.Send(Data, false); 
end; 
 
procedure TrltServerInterpreter.DoPlayerEdit(const Data: IDataBlock); 
var 
  Size : integer; 
  s : integer; 
  PlayerID : String; 
  VarFlag : TVarFlags; 
  RoundNo, WheelNo : integer; 
  PlayerEditInfo : TPlayerEditInfo; 
begin 
  Data.Read(Size, sizeof(Size)); 
  Data.Read(PlayerEditInfo, Size); 
  Data.Clear; 
  PlayerEditInfo := rltManager.DoPlayerEdit(PlayerEditInfo); 
  Size := sizeof(PlayerEditInfo); 
  Data.Write(Size, Sizeof(Size)); 
  Data.Write(PlayerEditInfo, size); 
  Data.Signature := ResultSig or asPlayerEdit; 
  FSendDataBlock.Send(Data, false); 
 
end; 
 
procedure TrltServerInterpreter.CallLogout(PlayerID : String); 
var 
  Data: IDataBlock; 
  Size : integer; 
  VarFlag : TVarFlags; 
 
begin 
  FCriticalSection.Enter; 
  try 
    Data := TDataBlock.Create as IDataBlock; 
    WriteVariant(PlayerID, Data); 
    Data.Signature := CallSig or asLogoffPlayer; 
    Data := FSendDataBlock.Send(Data, false); 
  finally 
    FCriticalSection.Leave;  
  end; 
end; 
 
procedure TrltServerInterpreter.DoGetPlayerList(const Data: IDataBlock); 
var 
  Size : integer; 
  s : integer; 
  PlayerID : String; 
  VarFlag : TVarFlags; 
  PlayerList : TPlayerList; 
  buf : TArrayOfPlayerInfo; 
begin 
  Data.Read(Size, sizeof(Size)); 
  Data.Read(PlayerList, Sizeof(PlayerList)); 
//  SetLength(buf, PlayerList.PlayerCount); 
  Data.Read(buf, PlayerList.Size); 
  PlayerList.Data := @buf; 
  Data.Clear; 
  PlayerList := rltManager.GetPlayerList(PlayerList); 
  Size := sizeof(PlayerList); 
  Data.Write(Size, Sizeof(Size)); 
  Data.Write(PlayerList, sizeof(TPlayerList)); 
  if PlayerList.Data<> nil then 
    Data.Write(PlayerList.Data^, PlayerList.Size); 
  Data.Signature := ResultSig or asPlayerList; 
  try 
    FSendDataBlock.Send(Data, false); 
  finally 
//    SetLength(buf, 0); 
//    if PlayerList.Data<>nil then FreeMem(PlayerList.Data); 
    PlayerList.Data := nil; 
  end; 
end; 
 
procedure TrltServerInterpreter.DoSetRoundResult(const Data: IDataBlock); 
var 
  Size : integer; 
  s : integer; 
  VarFlag : TVarFlags; 
  WheelResult : integer; 
  Result : boolean; 
begin 
  WheelResult := ReadVariant(VarFlag, Data); 
  Data.Clear; 
  Result := rltManager.SetOpenColorIndex(WheelResult); 
  WriteVariant(Result, Data); 
  Data.Signature := ResultSig or asSetRoundResult; 
  FSendDataBlock.Send(Data, false); 
end; 
 
procedure TrltServerInterpreter.DoGetGameParams(const Data: IDataBlock); 
var 
  CGameParams : TGameParams; 
  Size : integer; 
begin 
  Data.Clear; 
  CGameParams := rltManager.GetGameParams; 
  Size := Sizeof(CGameParams); 
  Data.Write(Size, Sizeof(Size)); 
  Data.Write(CGameParams, Size); 
  Data.Signature := ResultSig or asGetGameParams; 
  FSendDataBlock.Send(Data, False); 
end; 
 
procedure TrltServerInterpreter.DoSetGameParams(const Data: IDataBlock); 
var 
  CGameParams : TGameParams; 
  Size : integer; 
  VarFlag : TVarFlags; 
  Result : boolean; 
begin 
  Data.Read(Size, Sizeof(Size)); 
  Data.Read(CGameParams, Size); 
  Result := rltManager.SetGameParams(CGameParams); 
  WriteVariant(Result, Data); 
  Data.Signature := ResultSig or asSetGameParams; 
  FSendDataBlock.Send(Data, False); 
end; 
 
procedure TrltServerInterpreter.DoGetRoundState(const Data: IDataBlock); 
var 
  CRoundState : TRoundState; 
  Size : integer; 
begin 
  Data.Clear; 
  CRoundState := rltManager.Round.State; 
  Size := Sizeof(CRoundState); 
  Data.Write(Size, Sizeof(Size)); 
  Data.Write(CRoundState, Size); 
  Data.Signature := ResultSig or asGetRoundState; 
  FSendDataBlock.Send(Data, False); 
end; 
 
procedure TrltServerInterpreter.DoSetRoundState(const Data: IDataBlock); 
var 
  CRoundState : TRoundState; 
  Size : integer; 
  Result : boolean; 
begin 
  Data.Read(Size, Sizeof(Size)); 
  Data.Read(CRoundState, Size); 
  Result := rltManager.setRoundState(CRoundState); 
  Data.Clear; 
  WriteVariant(Result, Data); 
  Data.Signature := ResultSig or asSetRoundState; 
  FSendDataBlock.Send(Data, False); 
end; 
 
procedure TrltServerInterpreter.DoGetRoundScordInfo( 
  const Data: IDataBlock); 
var 
  CRoundScordInfo : TRoundScordInfos; 
  Size : integer; 
  RoundID : integer; 
  VarFlag : TVarFlags; 
begin 
  RoundID := ReadVariant(VarFlag, Data); 
  Data.Clear; 
  CRoundScordInfo := rltManager.GetRoundScordInfo(RoundID); 
  Size := Sizeof(CRoundScordInfo); 
  Data.Write(Size, Sizeof(Size)); 
  Data.Write(CRoundScordInfo, Size); 
  Data.Signature := ResultSig or asGetRoundScordInfo; 
  FSendDataBlock.Send(Data, False); 
end; 
 
procedure TrltServerInterpreter.DoUploadPlayerList(const Data: IDataBlock); 
var 
  Size : integer; 
  s : integer; 
  PlayerID : String; 
  VarFlag : TVarFlags; 
  PlayerList : TPlayerList; 
  buf : TArrayOfPlayerInfo; 
  Re : boolean; 
begin 
  try 
    Re := false; 
    Data.Read(Size, sizeof(Size)); 
    Data.Read(PlayerList, Sizeof(PlayerList)); 
    Data.Read(buf, PlayerList.Size); 
    PlayerList.Data := @buf; 
    rltManager.SetPlayerList(PlayerList); 
    Re := true; 
    Data.Clear; 
 
    Size := Integer(Re); 
    Data.Write(Size, Sizeof(Size)); 
    Data.Signature := ResultSig or asUploadPlayerList; 
    try 
      FSendDataBlock.Send(Data, false); 
    finally 
      PlayerList.Data := nil; 
    end; 
  except 
  end; 
end; 
 
procedure TrltServerInterpreter.DoGetRoundInfoLog(const Data: IDataBlock); 
var 
  Size : integer; 
  Count : integer; 
  PlayerID : String; 
  VarFlag : TVarFlags; 
  Buf : TArrayofRoundInfo; 
 
begin 
  Data.Clear; 
  Count := rltManager.GetRoundInfoLog(Buf); 
  Size := sizeof(Count); 
  Data.Write(Size, Sizeof(Size)); 
  Data.Write(Count, Size); 
  Size := sizeof(TRoundInfoLog)* Count; 
  Data.Write(Size, Sizeof(Size)); 
  Data.Write(Buf, Size); 
  Data.Signature := ResultSig or asGetRoundLog; 
  FSendDataBlock.Send(Data, false); 
end; 
 
procedure TrltServerInterpreter.DoGetPlayerBetInfoLog( 
  const Data: IDataBlock); 
var 
  Size : integer; 
  Count : integer; 
  PlayerID : String; 
  VarFlag : TVarFlags; 
  Buf : TArrayofPlayerBetInfo; 
begin 
  Data.Clear; 
  Count := rltManager.GetPlayerBetInfoLog(Buf); 
  Size := sizeof(Count); 
  Data.Write(Size, Sizeof(Size)); 
  Data.Write(Count, Size); 
  Size := sizeof(TPlayerBetInfo)* Count; 
  Data.Write(Size, Sizeof(Size)); 
  Data.Write(Buf, Size); 
  Data.Signature := ResultSig or asGetPlayerBetLog; 
  FSendDataBlock.Send(Data, false); 
end; 
 
procedure TrltServerInterpreter.DoClearPlayerBetInfoLog( 
  const Data: IDataBlock); 
var 
  Size : integer; 
  s : integer; 
  VarFlag : TVarFlags; 
  Result : integer; 
begin 
  Data.Clear; 
  Result := Integer(rltManager.ClearPlayerBetInfoLog); 
 
  Size := sizeof(Result); 
 
  Data.Write(Size, Sizeof(Size)); 
  Data.Write(Result, size); 
  Data.Signature := ResultSig or asClearPlayerBetLog; 
  FSendDataBlock.Send(Data, false); 
 
 
end; 
 
procedure TrltServerInterpreter.DoClearRoundInfoLog( 
  const Data: IDataBlock); 
var 
  Size : integer; 
  s : integer; 
  VarFlag : TVarFlags; 
  Result : integer; 
begin 
  Data.Clear; 
  Result := Integer(rltManager.ClearRoundInfoLog); 
 
  Size := sizeof(Result); 
 
  Data.Write(Size, Sizeof(Size)); 
  Data.Write(Result, size); 
  Data.Signature := ResultSig or asClearGameLog; 
  FSendDataBlock.Send(Data, false); 
 
end; 
 
procedure TrltServerInterpreter.DoClearPlayerList(const Data: IDataBlock); 
var 
  Size : integer; 
  s : integer; 
  VarFlag : TVarFlags; 
  Result : integer; 
begin 
  Data.Clear; 
  Result := Integer(rltManager.ClearPlayerList); 
  Size := sizeof(Result); 
  Data.Write(Size, Sizeof(Size)); 
  Data.Write(Result, size); 
  Data.Signature := ResultSig or asClearPlayerBetLog; 
  FSendDataBlock.Send(Data, false); 
end; 
 
procedure TrltServerInterpreter.DoCheckAdmin(const Data: IDataBlock); 
var 
  AdminStr : String; 
  VarFlag : TVarFlags; 
  Result : boolean; 
  Size : integer; 
  ResultInt : integer; 
  tag : integer; 
begin 
  tag := ReadVariant(VarFlag, Data); 
  AdminStr := ReadVariant(VarFlag, Data); 
  Data.Clear; 
  Result := rltManager.CheckAdmin(Tag , AdminStr); 
  ResultInt := Integer(Result); 
  Size := sizeof(integer); 
  Data.Write(Size, Sizeof(Size)); 
  Data.Write(ResultInt, size); 
  Data.Signature := ResultSig or asCheckAdmin; 
  FSendDataBlock.Send(Data, false); 
end; 
 
procedure TrltServerInterpreter.DoLock(const Data: IDataBlock); 
var 
  VarFlag : TVarFlags; 
  Result : boolean; 
  LockValue : boolean; 
  ResultInt : integer; 
  Size : integer; 
begin 
  LockValue := ReadVariant(VarFlag, Data); 
  rltManager.IsLocked := LockValue; 
  Result := true; 
  ResultInt := Integer(Result); 
  Size := sizeof(integer); 
  Data.Write(Size, Sizeof(Size)); 
  Data.Write(ResultInt, size); 
  Data.Signature := ResultSig or asLockServer; 
  FSendDataBlock.Send(Data, false); 
 
end; 
 
end.