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


unit DAU; 
interface 
uses ADODB, DB, Types, classes, Forms, SyncObjs, Tltconst, rltSvr, SysUtils, 
  Variants, ActiveX, Registry, ScktCnst, Windows; 
const 
  ckDBPath = 'DBPath'; 
  ConnectString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%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 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.