www.pudn.com > Roulette.rar > ManagerInterpreter.pas
unit ManagerInterpreter;
interface
uses Classes, SConnectEx, TltConst, ExtCtrls, SysUtils, Forms, Dialogs, Windows;
type
TrltManagerInterpreter = class(TDataBlockInterpreter)
function DoCustomAction(Action: Integer; const Data: IDataBlock): Boolean; override;
private
function CallGetRoundScord: TRoundScord;
function CallGetCurrentRoundNo: integer;
function CallGetRoundCountDown: integer;
function GetRoundScord: TRoundScord;
protected
procedure DoException(const Data: IDataBlock); override;
public
{Receiving Calls}
//do game round
procedure DoSetCountDown(const Data: IDataBlock);
//do player manage
procedure DoLoginPlayer(const Data: IDataBlock) ;
procedure DoLogoffPlayer(const Data: IDataBlock);
procedure DoResetRound(const Data: IDataBlock);
procedure DoSetRound(const Data: IDataBlock);
procedure DoTimeSetting(const Data: IDataBlock);
procedure DoWheelParams(const Data: IDataBlock);
procedure DoLoginManager(const Data: IDataBlock);
{Sending Calls}
//get info
function CallGetServerInfo : TServerInfo;
function CallGetCurrentRound : TRound;
function CallGetTimeSetting :TTimeSetting;
function CallLoginPlayer(PlayerID, Password : String): boolean;
function CallLogoffPlayer(PlayerID : String): boolean;
function CallGetPlayerInfo(PlayerID : String) : TPlayerInfo;
function CallGetScore(RoundNo, WheelNo: integer) : TRoundScord;
function CallGetWheelParams : TWheelParams ;
function CallGetRoundInfo():TRoundInfo;
function CallPlayerEdit(APlayerEditInfo : TPlayerEditInfo):TPlayerEditInfo ;
function CallGetPlayerList(APlayerList : TPlayerList): TPlayerList;
function CallSetRoundResult(AColorIndex : integer):boolean;
function CallGetGameParams(var AGameParams : TGameParams) : boolean;
function CallSetGameParams(AGameParams : TGameParams) : boolean;
function CallGetRoundState: TRoundState;
function CallSetRoundState(ARoundState : TRoundState): boolean;
function CallSetPlayerList(const APlayerList : TPlayerList): boolean;
function CallGetRoundInfoLog(var AArrayofRoundInfo : TArrayofRoundInfo) : integer;
function CallGetPlayerBetLog(var AArrayofPlayerBetLog : TArrayofPlayerBetInfo) : integer;
function CallClearRoundInfoLog:boolean;
function CallClearPlayerBetInfoLog:boolean;
function CallClearPlayerList : boolean;
function CallCheckAdmin(Tag : integer; AdminStr: String) : boolean;
function CallSetLock(Lock : boolean):boolean;
end;
TrltSocketConnection = class(TSocketConnection)
private
FInterpreter : TrltManagerInterpreter;
protected
function GetInterpreter: TCustomDataBlockInterpreter; override;
procedure DoError(E: Exception); override;
published
property Interpreter;
end;
implementation
uses ScktCnst, Round, main;
{ TTltInterpreter }
function TrltManagerInterpreter.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 TrltManagerInterpreter.CallGetCurrentRoundNo: integer;
var
Data: IDataBlock;
Size : integer;
s : integer;
begin
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;
// Result := ReadVariant(Flags, Data);
end;
function TrltManagerInterpreter.DoCustomAction(Action: Integer;
const Data: IDataBlock): Boolean;
begin
inherited DoCustomAction(Action, Data);
case (Action and asMask) of
//client
asSetCountDown : DoSetCountDown(Data);
asSetRound : DoSetRound(Data);
asTimeSetting : DoTimeSetting(Data);
asWheelParams : DoWheelParams(Data);
asPlayerList:{ShowMessage('error 66')};
1:;
else
Result := false;
end;
end;
procedure TrltManagerInterpreter.DoSetCountDown(const Data: IDataBlock);
var
VarSize : integer;
VarFlag : TVarFlags;
begin
// rlt.Round.CountDown := ReadVariant(VarFlag, Data);
end;
{ TrltSocketConnetion }
procedure TrltSocketConnection.DoError(E: Exception);
begin
MessageBox(0, '连接服务器失败!', '', MB_OK);
end;
function TrltSocketConnection.GetInterpreter: TCustomDataBlockInterpreter;
begin
if not Assigned(FInterpreter) then
FInterpreter := TrltManagerInterpreter.Create(Self, SSockets);
Result := FInterpreter;
end;
procedure TrltManagerInterpreter.DoLoginPlayer(const Data: IDataBlock);
var
IsLogined : boolean;
VarFlag : TVarFlags;
VarSize : integer;
begin
//check is logined
IsLogined := ReadVariant(VarFlag, Data);
//active player
//
end;
procedure TrltManagerInterpreter.DoLogoffPlayer(const Data: IDataBlock);
begin
end;
procedure TrltManagerInterpreter.DoResetRound(const Data: IDataBlock);
begin
end;
procedure TrltManagerInterpreter.DoSetRound(const Data: IDataBlock);
var
VarSize : integer;
VarFlag : TVarFlags;
Round : TRound;
begin
{ Data.Read(VarSize, sizeof(VarSize));
Data.Read(Round, VarSize);
rlt.SetRound(Round);}
// rlt.Round := ReadVariant(VarFlag, Data);
end;
function TrltManagerInterpreter.GetRoundScord: TRoundScord;
begin
end;
function TrltManagerInterpreter.CallGetRoundCountDown: integer;
begin
end;
function TrltManagerInterpreter.CallGetRoundScord: TRoundScord;
begin
end;
function TrltManagerInterpreter.CallGetRoundState: TRoundState;
var
Data: IDataBlock;
VarSize : integer;
VarFlag : TVarFlags;
begin
Data := TDataBlock.Create as IDataBlock;
Data.Signature := CallSig or asGetRoundState;
Data := FSendDataBlock.Send(Data, True);
Data.Read(VarSize, sizeof(VarSize));
Data.Read(Result, VarSize);
end;
function TrltManagerInterpreter.CallGetCurrentRound: TRound;
var
Data: IDataBlock;
VarSize : integer;
VarFlag : TVarFlags;
begin
Data := TDataBlock.Create as IDataBlock;
Data.Signature := CallSig or asGetCurrentRound;
Data := FSendDataBlock.Send(Data, True);
Data.Read(VarSize, sizeof(VarSize));
Data.Read(Result, VarSize);
end;
procedure TrltManagerInterpreter.DoTimeSetting(const Data: IDataBlock);
var
VarSize : integer;
VarFlag : TVarFlags;
S : TTimeSetting;
begin
Data.Read(VarSize, sizeof(VarSize));
Data.Read(s, VarSize);
TimeSetting := S;
end;
function TrltManagerInterpreter.CallGetTimeSetting: TTimeSetting;
var
Data: IDataBlock;
Size : integer;
s : TTimeSetting;
begin
Data := TDataBlock.Create as IDataBlock;
Data.Signature := CallSig or asTimeSetting;
Data := FSendDataBlock.Send(Data, True);
Data.Read(size, sizeof(size));
Data.Read(s,Size);
Result := s;
end;
function TrltManagerInterpreter.CallLoginPlayer(PlayerID, Password : String): boolean;
var
Data: IDataBlock;
Size : integer;
s : boolean;
Flays : TVarFlags;
begin
Data := TDataBlock.Create as IDataBlock;
Data.Signature := CallSig or asLoginPlayer;
WriteVariant(PlayerID, Data);
WriteVariant(Password, Data);
Data := FSendDataBlock.Send(Data, True);
Result := ReadVariant(Flays, Data);
end;
function TrltManagerInterpreter.CallGetPlayerInfo(
PlayerID: String): TPlayerInfo;
var
Data: IDataBlock;
Size : integer;
s : boolean;
Flays : TVarFlags;
begin
Data := TDataBlock.Create as IDataBlock;
Data.Signature := CallSig or asPlayerInfo;
WriteVariant(PlayerID, Data);
Data := FSendDataBlock.Send(Data, True);
Data.Read(Size, sizeof(Size));
Data.Read(Result, Size);
end;
function TrltManagerInterpreter.CallLogoffPlayer(PlayerID : String): boolean;
var
Data: IDataBlock;
Size : integer;
s : boolean;
Flays : TVarFlags;
begin
Data := TDataBlock.Create as IDataBlock;
Data.Signature := CallSig or asLogoffPlayer;
WriteVariant(PlayerID, Data);
Data := FSendDataBlock.Send(Data, True);
Result := ReadVariant(Flays, Data);
end;
{procedure TrltManagerInterpreter.DoPlayerInfo(const Data: IDataBlock);
var
PlayInfo : TPlayerInfo;
Size : integer;
I : integer;
begin
Data.Read(Size, sizeof(Size));
Data.Read(PlayInfo, Size);
APlayer := nil;
for i := low(Player) to High(Player) do
begin
if PlayInfo.ID = Player[i].UserID then
begin
APlayer := Player[I];
if APlayer <> nil then
with PlayInfo do
begin
APlayer.money := money;
APlayer.RBet := Bet[btRed];
APlayer.GBet := Bet[btBlack];
APlayer.BBet := Bet[btGreen];
APlayer.State := State;
APlayer.Modified := false;
end;
end;
end;
end;
}
function TrltManagerInterpreter.CallGetScore(RoundNo,
WheelNo: integer): TRoundScord;
var
Data: IDataBlock;
Size : integer;
s : boolean;
Flays : TVarFlags;
begin
Data := TDataBlock.Create as IDataBlock;
Data.Signature := CallSig or asGetRoundScord;
WriteVariant(RoundNo, Data);
WriteVariant(WheelNo, Data);
Data := FSendDataBlock.Send(Data, True);
Data.Read(Size, sizeof(Size));
Data.Read(Result, Size);
end;
function TrltManagerInterpreter.CallGetWheelParams: TWheelParams;
var
Data: IDataBlock;
Size : integer;
s : boolean;
Flays : TVarFlags;
begin
Data := TDataBlock.Create as IDataBlock;
Data.Signature := CallSig or asWheelParams;
Data := FSendDataBlock.Send(Data, True);
Data.Read(Size, sizeof(Size));
Data.Read(Result, Size);
end;
procedure TrltManagerInterpreter.DoWheelParams(const Data: IDataBlock);
var
Size : integer;
I : integer;
begin
{ Data.Read(Size, sizeof(Size));
Data.Read(rlt.WheelParams, Size);
rlt.UpdateWheelParams;
}
end;
procedure TrltManagerInterpreter.DoLoginManager(const Data: IDataBlock);
begin
end;
function TrltManagerInterpreter.CallGetRoundInfo: TRoundInfo;
var
I : integer;
RoundInfo : TRoundInfo;
Data: IDataBlock;
Size : integer;
s : boolean;
Flays : TVarFlags;
begin
if RoundMonitorForm = nil then Exit;
Data := TDataBlock.Create as IDataBlock;
Data.Signature := CallSig or asGetRoundInfo;
Data := FSendDataBlock.Send(Data, True);
Data.Read(Size, sizeof(Size));
Data.Read(Result, Size);
end;
function TrltManagerInterpreter.CallPlayerEdit(
APlayerEditInfo: TPlayerEditInfo): TPlayerEditInfo;
var
I : integer;
Data: IDataBlock;
Size : integer;
s : boolean;
Flays : TVarFlags;
begin
Data := TDataBlock.Create as IDataBlock;
Size := Sizeof(APlayerEditInfo);
Data.Write(Size, Sizeof(Size));
Data.Write(APlayerEditInfo, Size);
Data.Signature := CallSig or asPlayerEdit;
Data := FSendDataBlock.Send(Data, True);
Data.Read(Size, sizeof(Size));
Data.Read(Result, Size);
end;
function TrltManagerInterpreter.CallGetPlayerList(
APlayerList: TPlayerList): TPlayerList;
var
I : integer;
Data: IDataBlock;
Size : integer;
s : boolean;
Flays : TVarFlags;
begin
Data := TDataBlock.Create as IDataBlock;
Size := Sizeof(TPlayerList);
Data.Write(Size, Sizeof(Size));
Data.Write(APlayerList, Size);
if APlayerList.Data <> nil then
Data.Write(APlayerList.Data^, APlayerList.Size);
Data.Signature := CallSig or asPlayerList;
Data := FSendDataBlock.Send(Data, True);
Data.Read(Size, sizeof(Size));
Data.Read(Result, Size);
GetMem(Result.Data, Result.Size);
FillChar(Result.Data^, Result.Size, #0);
Data.Read(Result.Data^, Result.Size);
end;
function TrltManagerInterpreter.CallSetRoundResult(AColorIndex: integer):boolean;
var
I : integer;
Data: IDataBlock;
Size : integer;
s : boolean;
Flays : TVarFlags;
begin
Data := TDataBlock.Create as IDataBlock;
WriteVariant(AColorIndex, Data);
Data.Signature := CallSig or asSetRoundResult;
Data := FSendDataBlock.Send(Data, True);
Result := ReadVariant(Flays, Data);
end;
procedure TrltManagerInterpreter.DoException(const Data: IDataBlock);
begin
// inherited;
// nothing;
end;
function TrltManagerInterpreter.CallSetGameParams(
AGameParams: TGameParams): boolean;
var
I : integer;
Data: IDataBlock;
Size : integer;
Flays : TVarFlags;
begin
Result := false;
Data := TDataBlock.Create as IDataBlock;
Size := sizeof(AGameParams);
Data.Write(Size , sizeof(Size));
Data.Write(AGameParams, Size);
Data.Signature := CallSig or asSetGameParams;
Data := FSendDataBlock.Send(Data, True);
Result := ReadVariant(Flays, Data);
end;
function TrltManagerInterpreter.CallGetGameParams(
var AGameParams: TGameParams): boolean;
var
I : integer;
Data: IDataBlock;
Size : integer;
Flays : TVarFlags;
begin
Result := false;
Data := TDataBlock.Create as IDataBlock;
Data.Signature := CallSig or asGetGameParams;
Data := FSendDataBlock.Send(Data, True);
Data.Read(Size , sizeof(Size));
Data.Read(AGameParams, Size);
Result := true;
end;
function TrltManagerInterpreter.CallSetRoundState(
ARoundState: TRoundState): boolean;
var
Data: IDataBlock;
VarSize : integer;
VarFlag : TVarFlags;
begin
Data := TDataBlock.Create as IDataBlock;
VarSize := Sizeof(ARoundState);
Data.Write(VarSize, Sizeof(VarSize));
Data.Write(ARoundState, VarSize);
Data.Signature := CallSig or asSetRoundState;
Data := FSendDataBlock.Send(Data, True);
Result := ReadVariant(VarFlag, Data);
end;
function TrltManagerInterpreter.CallSetPlayerList(
const APlayerList: TPlayerList): boolean;
var
I : integer;
Data: IDataBlock;
Size : integer;
s : boolean;
Flays : TVarFlags;
begin
Data := TDataBlock.Create as IDataBlock;
Size := Sizeof(TPlayerList);
Data.Write(Size, Sizeof(Size));
Data.Write(APlayerList, Size);
if APlayerList.Data <> nil then
Data.Write(APlayerList.Data^, APlayerList.Size);
Data.Signature := CallSig or asUploadPlayerList;
Data := FSendDataBlock.Send(Data, True);
Data.Read(Size, sizeof(Size));
Result := boolean(Size);
// Result := ReadVariant(Flays, Data);
end;
function TrltManagerInterpreter.CallGetRoundInfoLog(
var AArrayofRoundInfo: TArrayofRoundInfo): integer;
var
I : integer;
Data: IDataBlock;
Size : integer;
s : boolean;
Flays : TVarFlags;
begin
Data := TDataBlock.Create as IDataBlock;
Data.Signature := CallSig or asGetRoundLog;
Data := FSendDataBlock.Send(Data, True);
Data.Read(Size, sizeof(Size));
if Size > Sizeof(Result) then raise Exception.Create('数据返回格式错误。');
Data.Read(Result, Size); //大小
Data.Read(Size, sizeof(Size));
if Size > Sizeof(AArrayofRoundInfo) then raise Exception.Create('数据返回格式错误。');
Data.Read(AArrayofRoundInfo, Size);
end;
function TrltManagerInterpreter.CallGetPlayerBetLog(
var AArrayofPlayerBetLog: TArrayofPlayerBetInfo): integer;
var
I : integer;
Data: IDataBlock;
Size : integer;
s : boolean;
Flays : TVarFlags;
begin
Data := TDataBlock.Create as IDataBlock;
Data.Signature := CallSig or asGetPlayerBetLog;
Data := FSendDataBlock.Send(Data, True);
Data.Read(Size, sizeof(Size));
Data.Read(Result, Size); //大小
Data.Read(Size, sizeof(Size));
Data.Read(AArrayofPlayerBetLog, Size);
end;
function TrltManagerInterpreter.CallClearPlayerBetInfoLog: boolean;
var
I : integer;
Data: IDataBlock;
Size : integer;
s : boolean;
Flays : TVarFlags;
begin
Data := TDataBlock.Create as IDataBlock;
Data.Signature := CallSig or asClearPlayerBetLog;
Data := FSendDataBlock.Send(Data, True);
Data.Read(Size, sizeof(Size));
Data.Read(s, Size); //大小
Result := boolean(s);
end;
function TrltManagerInterpreter.CallClearRoundInfoLog: boolean;
var
I : integer;
Data: IDataBlock;
Size : integer;
s : boolean;
Flays : TVarFlags;
begin
Data := TDataBlock.Create as IDataBlock;
Data.Signature := CallSig or asClearGameLog;
Data := FSendDataBlock.Send(Data, True);
Data.Read(Size, sizeof(Size));
Data.Read(s, Size); //大小
Result := boolean(s);
end;
function TrltManagerInterpreter.CallClearPlayerList: boolean;
var
I : integer;
Data: IDataBlock;
Size : integer;
s : boolean;
Flays : TVarFlags;
begin
Data := TDataBlock.Create as IDataBlock;
Data.Signature := CallSig or asClearPlayerList;
Data := FSendDataBlock.Send(Data, True);
Data.Read(Size, sizeof(Size));
Data.Read(s, Size); //大小
Result := boolean(s);
end;
function TrltManagerInterpreter.CallCheckAdmin(Tag: integer;
AdminStr: String): boolean;
var
I : integer;
Data: IDataBlock;
Size : integer;
s : integer;
Flays : TVarFlags;
begin
Data := TDataBlock.Create as IDataBlock;
WriteVariant(Tag, Data);
WriteVariant(AdminStr, Data);
Data.Signature := CallSig or asCheckAdmin;
Data := FSendDataBlock.Send(Data, True);
Data.Read(Size, sizeof(Size));
Data.Read(s, Size); //大小
Result := boolean(s);
end;
function TrltManagerInterpreter.CallSetLock(Lock: boolean): boolean;
var
I : integer;
Data: IDataBlock;
Size : integer;
s : integer;
Flays : TVarFlags;
begin
Data := TDataBlock.Create as IDataBlock;
WriteVariant(Lock, Data);
Data.Signature := CallSig or asLockServer;
Data := FSendDataBlock.Send(Data, True);
Data.Read(Size, sizeof(Size));
Data.Read(s, Size); //大小
Result := boolean(s);
end;
end.