亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? frnengn.pas

?? FIR引擎最新源碼+注冊
?? PAS
?? 第 1 頁 / 共 2 頁
字號(hào):
unit FrnEngn;

interface

uses
  Windows, Classes, SysUtils, Grobal2, SDK;
type
  TFrontEngine = class(TThread)
    m_UserCriticalSection: TRTLCriticalSection;
    m_LoadRcdList: TList;
    m_SaveRcdList: TList;
    m_ChangeGoldList: TList;
  private
    m_LoadRcdTempList: TList;
    m_SaveRcdTempList: TList;
    procedure GetGameTime();
    procedure ProcessGameDate();
    function LoadHumFromDB(LoadUser: pTLoadDBInfo; var boReTry: Boolean): Boolean;
    function ChangeUserGoldInDB(GoldChangeInfo: pTGoldChangeInfo): Boolean;
    procedure Run();
    { Private declarations }
  protected
    procedure Execute; override;
  public
    constructor Create(CreateSuspended: Boolean);
    destructor Destroy; override;
    function SaveListCount(): Integer;
    function IsIdle(): Boolean;
    function IsFull(): Boolean;
    procedure DeleteHuman(nGateIndex, nSocket: Integer);
    function InSaveRcdList(sAccount, sChrName: string): Boolean;
    procedure AddChangeGoldList(sGameMasterName, sGetGoldUserName: string; nGold: Integer);
    procedure AddToLoadRcdList(sAccount, sChrName, sIPaddr: string; boFlag: Boolean; nSessionID: Integer; nPayMent, nPayMode, nSoftVersionDate, nSocket, nGSocketIdx, nGateIdx: Integer);
    procedure AddToLoadHeroRcdList(sCharName, sMsg: string; PlayObject: TObject; btLoadType: Byte);
    procedure AddToSaveRcdList(SaveRcd: pTSaveRcd);
    function UpDataSaveRcdList(SaveRcd: pTSaveRcd): Boolean;
    function GetSaveRcd(sAccount, sCharName: string): pTSaveRcd;
  end;

implementation
uses
  M2Share, RunDB, ObjBase, HUtil32;
{ TFrontEngine }

constructor TFrontEngine.Create(CreateSuspended: Boolean);
begin
  inherited;
  InitializeCriticalSection(m_UserCriticalSection);
  m_LoadRcdList := TList.Create;
  m_SaveRcdList := TList.Create;
  m_ChangeGoldList := TList.Create;
  m_LoadRcdTempList := TList.Create;
  m_SaveRcdTempList := TList.Create;
  //  FreeOnTerminate:=True;
  //AddToProcTable(@TFrontEngine.ProcessGameDate, 'TFrontEngine.ProcessGameDatea');
end;

destructor TFrontEngine.Destroy;
begin
  m_LoadRcdList.Free;
  m_SaveRcdList.Free;
  m_ChangeGoldList.Free;
  m_LoadRcdTempList.Free;
  m_SaveRcdTempList.Free;
  DeleteCriticalSection(m_UserCriticalSection);
  inherited;
end;

procedure TFrontEngine.Execute;
resourcestring
  sExceptionMsg = '[Exception] TFrontEngine::Execute';
begin
  while not Terminated do begin
    try
      Run();
    except
      MainOutMessage(sExceptionMsg);
    end;
    Sleep(1);
  end;
end;

procedure TFrontEngine.GetGameTime;
var
  Hour, Min, Sec, MSec: Word;
begin
  DecodeTime(Time, Hour, Min, Sec, MSec);
  case Hour of
    5, 6, 7, 8, 9, 10, 16, 17, 18, 19, 20, 21, 22: g_nGameTime := 1;
    11, 23: g_nGameTime := 2;
    4, 15: g_nGameTime := 0;
    0, 1, 2, 3, 12, 13, 14: g_nGameTime := 3;
  end;
end;

function TFrontEngine.IsIdle: Boolean;
begin
  Result := False;
  EnterCriticalSection(m_UserCriticalSection);
  try
    if m_SaveRcdList.Count = 0 then Result := True;
  finally
    LeaveCriticalSection(m_UserCriticalSection);
  end;
end;

function TFrontEngine.SaveListCount: Integer;
begin
  Result := 0;
  EnterCriticalSection(m_UserCriticalSection);
  try
    Result := m_SaveRcdList.Count;
  finally
    LeaveCriticalSection(m_UserCriticalSection);
  end;
end;

procedure TFrontEngine.ProcessGameDate;
var
  I: Integer;
  II: Integer;
  TempList: TList;
  ChangeGoldList: TList;
  LoadDBInfo, LoadDB: pTLoadDBInfo;
  SaveRcd: pTSaveRcd;
  GoldChangeInfo: pTGoldChangeInfo;
  boReTryLoadDB: Boolean;
  boSaveRcd: Boolean;
  nCode: Integer;
resourcestring
  sExceptionMsg = '[Exception] TFrontEngine::ProcessGameDate Code:%d';
  sSaveExceptionMsg = '數(shù)據(jù)庫服務(wù)器出現(xiàn)異常,請重新啟動(dòng)數(shù)據(jù)庫服務(wù)器?。。?#039;;
begin
  try
    nCode := 0;
    ChangeGoldList := nil;
    if g_nSaveRcdErrorCount >= 10 then begin
      if GetTickCount - g_dwShowSaveRcdErrorTick > 1000 then begin
        g_dwShowSaveRcdErrorTick := GetTickCount;
        MainOutMessage(sSaveExceptionMsg);
      end;
    end;
    EnterCriticalSection(m_UserCriticalSection);
    try
      for I := 0 to m_SaveRcdList.Count - 1 do begin
        m_SaveRcdTempList.Add(m_SaveRcdList.Items[I]);
      end;
      nCode := 1;
      TempList := m_LoadRcdTempList;
      nCode := 2;
      m_LoadRcdTempList := m_LoadRcdList;
      nCode := 3;
      m_LoadRcdList := TempList;
      nCode := 4;
      if m_ChangeGoldList.Count > 0 then begin
        ChangeGoldList := TList.Create;
        for I := 0 to m_ChangeGoldList.Count - 1 do begin
          ChangeGoldList.Add(m_ChangeGoldList.Items[I]);
        end;
      end;
      m_ChangeGoldList.Clear;
    finally
      LeaveCriticalSection(m_UserCriticalSection);
    end;

    for I := 0 to m_SaveRcdTempList.Count - 1 do begin
      SaveRcd := m_SaveRcdTempList.Items[I];
      if (not DBSocketConnected) or (g_nSaveRcdErrorCount >= 10) then begin //DBS關(guān)閉 不保存
        if (SaveRcd.PlayObject <> nil) and (not SaveRcd.boIsHero) then begin
          TPlayObject(SaveRcd.PlayObject).m_boRcdSaved := True;
        end;
        EnterCriticalSection(m_UserCriticalSection);
        try
          for II := m_SaveRcdList.Count - 1 downto 0 do begin
            if m_SaveRcdList.Items[II] = SaveRcd then begin
              m_SaveRcdList.Delete(II);
              nCode := 5;
              DisPoseAndNil(SaveRcd);
              nCode := 6;
              Break;
            end;
          end;
        finally
          LeaveCriticalSection(m_UserCriticalSection);
        end;
      end else begin
        boSaveRcd := False;
        if SaveRcd.nReTryCount = 0 then begin
          boSaveRcd := True;
        end else
          if (SaveRcd.nReTryCount < 50) and (GetTickCount - SaveRcd.dwSaveTick > 5000) then begin //保存錯(cuò)誤等待5秒后在保存
          boSaveRcd := True;
        end else
          if SaveRcd.nReTryCount >= 50 then begin //失敗50次后不在保存
          if (SaveRcd.PlayObject <> nil) and (not SaveRcd.boIsHero) then begin
            TPlayObject(SaveRcd.PlayObject).m_boRcdSaved := True;
          end;
          EnterCriticalSection(m_UserCriticalSection);
          try
            for II := m_SaveRcdList.Count - 1 downto 0 do begin
              if m_SaveRcdList.Items[II] = SaveRcd then begin
                m_SaveRcdList.Delete(II);
                nCode := 7;
                DisPoseAndNil(SaveRcd);
                nCode := 8;
                Break;
              end;
            end;
          finally
            LeaveCriticalSection(m_UserCriticalSection);
          end;
        end;

        if boSaveRcd then begin
          if SaveHumRcdToDB(SaveRcd.sAccount, SaveRcd.sChrName, SaveRcd.nSessionID, SaveRcd.boIsHero, SaveRcd.HumanRcd) then begin
            if (SaveRcd.PlayObject <> nil) and (not SaveRcd.boIsHero) then begin
              TPlayObject(SaveRcd.PlayObject).m_boRcdSaved := True;
            end;
            EnterCriticalSection(m_UserCriticalSection);
            try
              for II := m_SaveRcdList.Count - 1 downto 0 do begin
                if m_SaveRcdList.Items[II] = SaveRcd then begin
                  m_SaveRcdList.Delete(II);
                  nCode := 9;
                  DisPoseAndNil(SaveRcd);
                  nCode := 10;
                  Break;
                end;
              end;
            finally
              LeaveCriticalSection(m_UserCriticalSection);
            end;
          end else begin //保存失敗
            Inc(SaveRcd.nReTryCount);
            SaveRcd.dwSaveTick := GetTickCount;
          end;
        end;
      end;
    end;
    m_SaveRcdTempList.Clear;
    nCode := 11;
    for I := 0 to m_LoadRcdTempList.Count - 1 do begin
      LoadDBInfo := m_LoadRcdTempList.Items[I];
      if (not LoadHumFromDB(LoadDBInfo, boReTryLoadDB)) and (not LoadDBInfo.boIsHero) then
        RunSocket.CloseUser(LoadDBInfo.nGateIdx, LoadDBInfo.nSocket);
      if not boReTryLoadDB then begin
        DisPoseAndNil(LoadDBInfo);
      end else begin //如果讀取人物數(shù)據(jù)失敗(數(shù)據(jù)還沒有保存),則重新加入隊(duì)列
        EnterCriticalSection(m_UserCriticalSection);
        try
          m_LoadRcdList.Add(LoadDBInfo);
        finally
          LeaveCriticalSection(m_UserCriticalSection);
        end;
      end;
    end;
    m_LoadRcdTempList.Clear;
    nCode := 12;
    if ChangeGoldList <> nil then begin
      for I := 0 to ChangeGoldList.Count - 1 do begin
        GoldChangeInfo := ChangeGoldList.Items[I];
        ChangeUserGoldInDB(GoldChangeInfo);
        nCode := 13;
        Dispose(GoldChangeInfo);
        nCode := 14;
      end;
      nCode := 15;
      ChangeGoldList.Free;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品美女一区二区三区| 亚洲午夜久久久久久久久久久| 国产精品久久久久久久蜜臀| 亚洲一区二区三区在线播放| 国产精品自在欧美一区| 精品视频一区 二区 三区| 国产精品视频免费| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 国产亚洲一本大道中文在线| 亚洲狠狠爱一区二区三区| 国产成人精品亚洲777人妖| 欧美一区二区三区四区视频| 亚洲男同1069视频| 国产精品99精品久久免费| 欧美肥妇free| 一区二区三国产精华液| 国产91露脸合集magnet| 精品国产麻豆免费人成网站| 一区二区三区不卡视频| 91香蕉视频污在线| 亚洲国产成人在线| 国产乱理伦片在线观看夜一区| 91精品欧美综合在线观看最新 | 成人中文字幕在线| 精品av综合导航| 蜜臀av性久久久久蜜臀aⅴ四虎 | 成人动漫一区二区在线| 久久久久九九视频| 激情文学综合网| xvideos.蜜桃一区二区| 麻豆精品蜜桃视频网站| 欧美精品色综合| 亚洲在线一区二区三区| 国产日韩欧美一区二区三区综合| 亚洲图片自拍偷拍| 精品噜噜噜噜久久久久久久久试看| 最新热久久免费视频| 成人免费视频播放| 中文字幕一区二区三区乱码在线| 成人性生交大片免费看中文| 中文字幕欧美三区| 99久久伊人久久99| 一区二区三区中文在线观看| 在线观看日韩国产| 日本成人在线看| 欧美二区在线观看| 日本不卡免费在线视频| 精品国免费一区二区三区| 国产不卡在线视频| 自拍视频在线观看一区二区| 欧美在线一区二区| 日韩和欧美的一区| 久久婷婷国产综合精品青草| 国产成人综合在线观看| 亚洲欧美偷拍另类a∨色屁股| 欧美做爰猛烈大尺度电影无法无天| 亚洲aaa精品| 欧美va亚洲va香蕉在线| 成人av免费在线观看| 亚洲嫩草精品久久| 欧美一三区三区四区免费在线看 | 国产亚洲成年网址在线观看| 福利电影一区二区| 亚洲主播在线观看| 精品福利一区二区三区| av中文字幕亚洲| 日韩一区欧美二区| 国产精品国产a| 91精品在线免费观看| 国产精品一二三在| 亚洲一区视频在线观看视频| 欧美成人乱码一区二区三区| 99免费精品在线观看| 色域天天综合网| 日韩精品亚洲一区| 国产精品不卡在线观看| 6080日韩午夜伦伦午夜伦| 高清视频一区二区| 日本不卡在线视频| 亚洲视频免费在线观看| 欧美精品一区二区三区蜜桃视频| 91麻豆高清视频| 国产精品一区一区| 午夜视频在线观看一区| 中文字幕制服丝袜成人av | 一区二区三区四区在线| 精品乱人伦小说| 欧美日韩国产一区二区三区地区| 岛国精品一区二区| 久久精品国产99久久6| 一个色综合av| 中文字幕成人av| 精品国产一区二区在线观看| 91黄视频在线| 99久久精品久久久久久清纯| 国产综合久久久久久久久久久久| 婷婷国产在线综合| 一区二区三区免费网站| 亚洲色图制服诱惑| 国产精品久久久久久久久搜平片| 久久综合狠狠综合久久综合88 | 成人黄页毛片网站| 国精品**一区二区三区在线蜜桃| 五月天激情小说综合| 一区二区欧美在线观看| 国内精品国产成人国产三级粉色| 亚洲一区二区在线免费观看视频| 中文字幕亚洲综合久久菠萝蜜| 久久精品视频免费| 久久久久久久综合日本| 精品国免费一区二区三区| 欧美精品日韩精品| 91精品国产手机| 91精品国产一区二区三区| 3d成人动漫网站| 日韩一级二级三级精品视频| 欧美日本乱大交xxxxx| 欧美日韩视频在线第一区| 欧美日韩成人在线| 欧美一区永久视频免费观看| 欧美一区二区在线播放| 91精品综合久久久久久| 欧美大尺度电影在线| 精品国产伦一区二区三区观看方式| 精品免费视频.| 国产日韩v精品一区二区| 国产精品美女久久久久av爽李琼 | 欧美一区二区三区免费| 日韩欧美不卡一区| 国产午夜精品久久久久久久| 国产精品私人影院| 一区二区日韩av| 日韩av成人高清| 国产一区二区不卡在线 | 欧美综合天天夜夜久久| 精品视频一区三区九区| 欧美一级一区二区| 国产三级久久久| 亚洲欧美日本韩国| 欧美aaa在线| 懂色av中文字幕一区二区三区| 91丨porny丨国产| 欧美精品第1页| 国产香蕉久久精品综合网| 亚洲丝袜制服诱惑| 免费在线观看日韩欧美| 高清国产一区二区| 欧美中文字幕不卡| 久久久另类综合| 一区二区三区欧美日| 久久丁香综合五月国产三级网站| 国产91富婆露脸刺激对白| 欧美综合在线视频| 国产亚洲精品资源在线26u| 亚洲自拍偷拍av| 国产麻豆日韩欧美久久| 在线中文字幕不卡| 久久久噜噜噜久噜久久综合| 亚洲综合色丁香婷婷六月图片| 蜜臀91精品一区二区三区 | 一二三四社区欧美黄| 免费看欧美女人艹b| 91麻豆成人久久精品二区三区| 日韩一级片网址| 亚洲精品乱码久久久久久久久| 激情综合色丁香一区二区| 日本大香伊一区二区三区| 久久青草欧美一区二区三区| 亚洲成人黄色小说| 99国产精品久久| 久久一二三国产| 秋霞国产午夜精品免费视频| 色综合婷婷久久| 国产偷国产偷亚洲高清人白洁| 一区二区三区四区在线| 波多野结衣欧美| 精品国产一区二区三区不卡| 五月综合激情网| 色欧美片视频在线观看| 国产午夜精品一区二区三区视频| 日本午夜一区二区| 欧美熟乱第一页| 一区二区三区不卡视频在线观看| 国产成人在线电影| 精品国产免费久久 | 久久久久久97三级| 久久精品国内一区二区三区| 色天使色偷偷av一区二区| 亚洲私人黄色宅男| av激情成人网| 国产精品无圣光一区二区| 国产精品一区二区黑丝| 欧美成人性福生活免费看| 热久久免费视频| 日韩欧美自拍偷拍| 蜜桃av一区二区三区电影| 欧美一级欧美一级在线播放| 久久精品国产久精国产| 精品国产3级a| 国产91丝袜在线18|