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


unit DAU; 
 
interface 
 
uses 
  Windows, ADODB, DB, Types, classes, Forms, SyncObjs, Tltconst, rltSvr, 
  SysUtils, Variants, ActiveX, Registry, ScktCnst; 
 
const 
  ckDBPath = 'DBPath'; 
  ckLocked = 'LOCK'; 
  ConnectString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Jet OLEDB:Database Password=%s'; 
  PlayerSQL = 'select * from player'; 
  RoundSQL = 'select * from '; 
 
  function DAUInit(): boolean; 
  function DAUFinit(): boolean; 
  function DALoadPlayer(Player : TPlayer): boolean; 
  procedure DASavePlayer(Player : TPlayer); 
  procedure DADeletePlayer(Player : TPlayer); 
  function DACreatePlayer(Player: TPlayer):integer; 
  function DAEditPlayer(Player: TPlayer):integer; 
  function DAGetNewID(TableName, FieldName : String):integer; 
  function DAGetNewPlayerID : String; 
  procedure SaveWheel(Round : TRound); 
  function ReadRoundScord(RoundID : integer; RoundScordArray: array of TRoundScord):boolean; 
  procedure ReadGameSetting(var TimeSetting : TTimeSetting) ; 
  procedure SaveGameSetting(TimeSetting : TTimeSetting); 
  function GetPlayerCount: integer; 
  procedure DAReadPlayers(Data : PArrayOfPlayerInfo; StartIndex , Count : integer); 
  function DAReadLastChangePlayer(Data :PArrayOfPlayerInfo;var AfterTime : TDateTime):integer; 
  function DAReadPlayer(APlayerID : String): TPlayerInfo; 
 
  function DAReadGameParams(var AGameParams : TGameParams): boolean; 
  function DASaveGameParams(AGameParams : TGameParams): boolean; 
 
  function DASaveRoundScordInfo(AWheelInfo : TWheelInfo): boolean; 
  function DASavePlayerBetInfo(APlayerBetInfo : TPlayerBetInfo) : boolean; 
 
  function DAGetRoundInfoLog(var AArrayofRoundInfo : TArrayofRoundInfo) : integer; 
  function DAGetPlayerBetInfoLog(var AArrayofPlayerBetInfo : TArrayofPlayerBetInfo) : integer; 
  function DAClearPlayerBetInfoLog : boolean; 
  function DAClearRoundInfoLog : boolean; 
  function DAClearPlayerList : boolean; 
 
var 
  CDBPath : String; 
 
implementation 
 
var 
  Connection : TADOConnection; 
  PlayerTable : TADOQuery; 
  Query : TADOQuery; 
  AccessCritical : TCriticalSection; 
 
function GetPlayerCount: integer; 
begin 
  Result := 0; 
  if (PlayerTable=nil) or (not PlayerTable.Active) then Exit; 
  Result := PlayerTable.RecordCount; 
end; 
 
procedure DAReadPlayers(Data : PArrayOfPlayerInfo; StartIndex , Count : integer); 
var 
  I : integer; 
  CPlayerInfo :TPlayerInfo; 
begin 
  if Count<=0 then Exit; 
  if Data = nil then Exit; 
  try 
    AccessCritical.Enter; 
    for I := StartIndex to Count+StartIndex-1 do begin 
      PlayerTable.RecNo := I+1; 
      FillChar(CPlayerInfo, sizeof(CPlayerInfo), #0); 
      with CPlayerInfo do begin 
        ID := VarToStr(PlayerTable['ID']); 
        Password := VarToStr(PlayerTable['password']); 
        UserName := VarToStr(PlayerTable['PlayName']); 
        Money := (PlayerTable['chip']); 
        LastActiveTime := PlayerTable.FieldByName('lastactive').AsDateTime; 
      end; 
      move(CPlayerInfo, Pointer(PChar(Data)+(I-StartIndex)*sizeof(TPlayerInfo))^, sizeof(TPlayerInfo)); 
    end; 
  finally 
    AccessCritical.Leave; 
  end; 
end; 
 
function DAReadLastChangePlayer(Data :PArrayOfPlayerInfo;var AfterTime : TDateTime):integer; 
var 
  I : integer; 
  CPlayerInfo :TPlayerInfo; 
  NowTime : TDateTime; 
begin 
  Result := 0; 
  NowTime := AfterTime; 
  if Data = nil then Exit; 
  try 
    AccessCritical.Enter; 
    for I := 0 to PlayerTable.RecordCount-1 do begin 
      PlayerTable.RecNo := I+1; 
      if PlayerTable.FieldByName('lastactive').AsDateTime > AfterTime then begin 
        FillChar(CPlayerInfo, sizeof(CPlayerInfo), #0); 
        with CPlayerInfo do begin 
          ID := VarToStr(PlayerTable['ID']); 
          Password := VarToStr(PlayerTable['password']); 
          Money := (PlayerTable['chip']); 
          UserName := varToStr(PlayerTable['playname']); 
          Memo := VarToStr(PlayerTable['memo']); 
          LastActiveTime := PlayerTable.FieldByName('lastactive').AsDateTime; 
          if NowTime '(nochange)' then 
      SysQuery['adminstr'] := AGameParams.AdminStr; 
    SysQuery.Post; 
  finally 
    SysQuery.Free; 
  end; 
  result := True; 
end; 
 
function DASaveRoundScordInfo(AWheelInfo : TWheelInfo): boolean; 
var 
  SysQuery : TADOQuery; 
begin 
  Result := false; 
  SysQuery := TADOQuery.Create(nil); 
  try 
    SysQuery.Connection := Connection; 
    SysQuery.SQL.Text := 'select * from round where 1=2'; 
    SysQuery.Open; 
    SysQuery.insert; 
    SysQuery['ID'] := AWheelInfo.RoundID; 
    SysQuery['roundno'] := AWheelInfo.RoundID; 
    SysQuery['wheelno'] := AWheelInfo.WheelID; 
    SysQuery['value'] := AWheelInfo.Settment; 
    SysQuery['r'] := AWheelInfo.RedBet; 
    SysQuery['g'] := AWheelInfo.GreenBet; 
    SysQuery['b'] := AWheelInfo.BlackBet; 
    SysQuery['result'] := AWheelInfo.Result; 
    SysQuery['resultcolor'] := AWheelInfo.ResultColor; 
    SysQuery['datetime'] := now; 
    SysQuery['auto'] := AWheelInfo.AutoValue; 
    SysQuery.Post; 
  finally 
    SysQuery.Free; 
  end; 
  result := True; 
end; 
 
function DASavePlayerBetInfo(APlayerBetInfo : TPlayerBetInfo) : boolean; 
var 
  SysQuery : TADOQuery; 
begin 
  Result := false; 
  SysQuery := TADOQuery.Create(nil); 
  try 
    SysQuery.Connection := Connection; 
    SysQuery.SQL.Text := 'select * from smartlog where 1=2'; 
    SysQuery.Open; 
    SysQuery.insert; 
    SysQuery['player'] := APlayerBetInfo.PlayerID; 
    SysQuery['rsmart'] := APlayerBetInfo.r; 
    SysQuery['gsmart'] := APlayerBetInfo.g; 
    SysQuery['bsmart'] := APlayerBetInfo.b; 
    SysQuery['wheelno'] := APlayerBetInfo.WheelNo; 
    SysQuery['roundno'] := APlayerBetInfo.RoundNo; 
    SysQuery['roundmain'] := APlayerBetInfo.RoundMain; 
    SysQuery['settlement'] := APlayerBetInfo.Settlement; 
    SysQuery['result'] := APlayerBetInfo.Result; 
    SysQuery['resultcolor'] := APlayerBetInfo.ResultColor; 
    SysQuery['datetime'] := now; 
    SysQuery['premoney'] := APlayerBetInfo.PreMoney; 
    SysQuery.Post; 
  finally 
    SysQuery.Free; 
  end; 
  result := True; 
end; 
 
function DACreatePlayer(Player: TPlayer):integer; 
begin 
  Result := -1; 
  if (PlayerTable=nil)or(not PlayerTable.Active) then Exit; 
  try 
    PlayerTable.Insert; 
    PlayerTable['ID'] := Player.ID; 
    PlayerTable['password'] := Player.Password; 
    PlayerTable['playname'] := Player.UserName; 
    PlayerTable['memo'] := Player.Memo; 
    PlayerTable['chip'] := Player.Money; 
    PlayerTable['lastactive'] := now; 
    PlayerTable.Post; 
  except 
    PlayerTable.Cancel; 
  end; 
end; 
 
function DAEditPlayer(Player: TPlayer):integer; 
begin 
  Result := -1; 
  if (PlayerTable=nil) or (not PlayerTable.Active) then Exit; 
  try 
    if not PlayerTable.Locate('ID', Player.ID, []) then Exit; 
    Result := 0; 
    PlayerTable.Edit; 
    PlayerTable['password'] := Player.Password; 
    PlayerTable['playname'] := Player.UserName; 
    PlayerTable['memo'] := Player.Memo; 
    PlayerTable['chip'] := Player.Money; 
    PlayerTable['lastactive'] := Player.LastActiveTime; 
    PlayerTable.Post; 
  except 
    PlayerTable.Cancel; 
    Result := 1; 
  end; 
end; 
 
function DAUInit(): boolean; 
var 
  Reg : TRegINIFile; 
begin 
  CoInitialize(nil); 
  Randomize; 
  Result := True; 
  Connection := TADOConnection.Create(nil); 
  AccessCritical := TCriticalSection.Create; 
  Reg := TRegINIFile.Create(''); 
  Reg.RootKey := HKEY_LOCAL_MACHINE; 
  Reg.OpenKey(KEY_SOCKETSERVER, True); 
  CDBPath := Reg.ReadString('', ckDBPath, 'Roulette.mdb'); 
  Reg.Free; 
  if FileExists(CDBPath)=False then begin 
    CDBPath:=UpperCase(ExtractFilepath(Application.ExeName))+'Roulette.mdb'; 
  end; 
  Connection.ConnectionString :=Format(ConnectString,[CDBPath,'700203']); 
  PlayerTable := TADOQuery.Create(Connection); 
  Query := TADOQuery.Create(Connection); 
  try 
    PlayerTable.Connection := Connection; 
    PlayerTable.CursorLocation:=clUseServer; 
    Connection.Connected := True; 
    Query.Connection := Connection; 
    PlayerTable.SQL.Text := PlayerSQL; 
    PlayerTable.Active := true; 
  except 
    Result := False; 
  end; 
end; 
 
function DAUFinit(): boolean; 
begin 
  Connection.Free; 
  AccessCritical.Free; 
  CoUninitialize; 
//  Connection.Free; 
end; 
 
function DALoadPlayer(Player : TPlayer): boolean; 
begin 
  Result := false; 
  if not PlayerTable.Locate('ID', Player.ID, []) then Exit; 
  with Player do begin 
    Player.Password := VarToStr(PlayerTable['password']); 
    Player.Money := (PlayerTable['chip']); 
    Player.LastActiveTime := PlayerTable.FieldByName('lastactive').AsDateTime; 
    Player.UserName := VarToStr(PlayerTable['playname']); 
    Player.Memo := VarToStr(PlayerTable['memo']); 
  end; 
  Result := true; 
end; 
 
procedure DASavePlayer(Player : TPlayer); 
var 
  CModified : boolean; 
begin 
  CModified := false; 
  if not PlayerTable.Locate('ID', Player.ID, []) then Exit; 
  with Player do begin 
    PlayerTable.Edit; 
    try 
      CModified := PlayerTable['chip']<> Player.Money; 
      CModified :=CModified or( VarToStr(PlayerTable['password'])<> Player.Password); 
      PlayerTable['password'] := Player.Password; 
      PlayerTable['chip'] := Player.Money; 
      if CModified then PlayerTable['lastactive'] := now 
      else PlayerTable['lastactive'] := Player.LastActiveTime ; 
      PlayerTable['playname'] := Player.UserName; 
      PlayerTable['memo'] := Player.Memo; 
      PlayerTable.Post; 
    except 
      PlayerTable.Cancel; 
      try 
        PlayerTable.Close; 
        PlayerTable.Open; 
      except 
      end; 
    end; 
  end; 
end; 
 
procedure DADeletePlayer(Player : TPlayer); 
begin 
  if (PlayerTable=nil)or(not PlayerTable.Active) then Exit; 
  if not PlayerTable.Locate('ID', Player.ID, []) then Exit; 
  PlayerTable.Delete; 
end; 
 
 
procedure SaveWheel(Round : TRound); 
begin 
end; 
 
function ReadRoundScord(RoundID : integer; RoundScordArray: array of TRoundScord):boolean; 
var 
  ADOQuery : TADOQuery; 
  i,j : integer; 
begin 
  for i :=Low(RoundScordArray) to High(RoundScordArray) do begin 
    with RoundScordArray[i] do begin 
      for j :=0 to 50 do Number[j] := -1; 
      Count := 0; 
    end; 
  end; 
  ADOQuery.Create(Application); 
  ADOQuery.Connection := Connection; 
  ADOQuery.SQL.Text :=format('select * from round where ID = %d  order by roundno, wheelno',[RoundID]); 
  AccessCritical.Enter; 
  try 
    ADOQuery.Open; 
    I := 0; J := 0; 
    ADOQuery.Next; 
    while not ADOQuery.Eof do begin 
      with RoundScordArray[i] do begin 
        Number[j] := ADOQuery['result']; 
        Count := j; 
      end; 
      inc(J); 
      if J>=50 then begin 
        inc(i); 
        j := 0; 
      end; 
      ADOQuery.Next; 
    end; 
  finally 
    AccessCritical.Leave; 
    ADOQuery.Free; 
  end; 
end; 
 
procedure ReadGameSetting(var TimeSetting : TTimeSetting) ; 
begin 
end; 
 
procedure SaveGameSetting(TimeSetting : TTimeSetting); 
begin 
end; 
 
function DAGetNewID(TableName, FieldName : String):integer; 
begin 
end; 
 
function DAGetNewPlayerID : String; 
var 
  NewPlayerID : integer; 
  NewPlayerIDString : String; 
begin 
  AccessCritical.Enter; 
  try 
    Query.SQL.Text := 'select max(ID) from player'; 
    Query.Open; 
    NewPlayerIDString := VarToStr(Query.Fields[0].Value); 
    try 
      NewPlayerID := StrToInt(NewPlayerIDString)+1; 
    except 
      NewPlayerID := 10000; 
    end; 
  finally 
    Result := IntToStr(NewPlayerID); 
    AccessCritical.Leave; 
  end; 
end; 
 
function DAGetRoundInfoLog(var AArrayofRoundInfo : TArrayofRoundInfo) : integer; 
var 
  LogQuery : TADOQuery; 
begin 
  Result := 0; 
  LogQuery := TADOQuery.Create(nil); 
  try 
    LogQuery.Connection := Connection; 
    LogQuery.SQL.Text := 'select * from round'; 
    LogQuery.Open; 
    LogQuery.First; 
    while (Result<10000) and (not LogQuery.Eof) do begin 
      if LogQuery.IsEmpty then Exit; 
      with AArrayofRoundInfo[Result] do begin 
        ID := LogQuery['id']; 
        Roundno :=LogQuery['Roundno']; 
        wheelno :=LogQuery['wheelno']; 
        dvalue := LogQuery['dvalue']; 
        value := LogQuery['value']; 
        r := LogQuery['r']; 
        g := LogQuery['g']; 
        b := LogQuery['b']; 
        result :=LogQuery['result']; 
        resultcolor :=LogQuery['resultcolor']; 
        datetime :=VarToDateTime(LogQuery['datetime']); 
        auto := LogQuery['auto']; 
      end; 
      LogQuery.Next; 
      inc(Result); 
    end; 
  finally 
    LogQuery.Free; 
  end; 
end; 
 
function DAGetPlayerBetInfoLog(var AArrayofPlayerBetInfo : TArrayofPlayerBetInfo) : integer; 
var 
  LogQuery : TADOQuery; 
begin 
  Result := 0; 
  LogQuery := TADOQuery.Create(nil); 
  try 
    LogQuery.Connection := Connection; 
    LogQuery.SQL.Text := 'select * from smartlog order by player, datetime '; 
    LogQuery.Open; 
    LogQuery.First; 
    while (Result<10000) and (not LogQuery.Eof) do begin 
      if LogQuery.IsEmpty then Exit; 
      with AArrayofPlayerBetInfo[Result] do begin 
        PlayerID := LogQuery['Player']; 
        r :=LogQuery['rsmart']; 
        b :=LogQuery['gsmart']; 
        g := LogQuery['bsmart']; 
        Settlement := LogQuery['settlement']; 
        Datetime := VarToDateTime(LogQuery['datetime']); 
        RoundNo := LogQuery['roundno']; 
        WheelNo := LogQuery['wheelno']; 
        Result :=LogQuery['result']; 
        ResultColor :=LogQuery['resultcolor']; 
        RoundMain :=(LogQuery['roundmain']); 
        PreMoney := LogQuery['premoney']; 
      end; 
      LogQuery.Next; 
      inc(Result); 
    end; 
  finally 
    LogQuery.Free; 
  end; 
end; 
 
function DAClearPlayerBetInfoLog : boolean; 
var 
  LogQuery : TADOQuery; 
begin 
  Result := false; 
  LogQuery := TADOQuery.Create(nil); 
  try 
    LogQuery.Connection := Connection; 
    LogQuery.SQL.Text := 'delete from smartlog'; 
    LogQuery.ExecSQL; 
    Result := true; 
  finally 
    LogQuery.Free; 
  end; 
end; 
 
function DAClearRoundInfoLog; 
var 
  LogQuery : TADOQuery; 
begin 
  Result := false; 
  LogQuery := TADOQuery.Create(nil); 
  try 
    LogQuery.Connection := Connection; 
    LogQuery.SQL.Text := 'delete from round'; 
    LogQuery.ExecSQL; 
    Result := true; 
  finally 
    LogQuery.Free; 
  end; 
end; 
 
function DAClearPlayerList : boolean; 
var 
  LogQuery : TADOQuery; 
begin 
  Result := false; 
  LogQuery := TADOQuery.Create(nil); 
  PlayerTable.Close; 
  try 
    LogQuery.Connection := Connection; 
    LogQuery.SQL.Text := 'delete from player'; 
    LogQuery.ExecSQL; 
    Result := true; 
  finally 
    LogQuery.Free; 
    PlayerTable.Open; 
  end; 
end; 
 
end.