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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lmain.pas

?? 傳奇服務端代碼 LoginSrvSQL 通訊部分
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
  g_Config.boRemoteClose := False;

  AccountDB := nil;
  //  g_MainMsgList:=TStringList.Create;
  CS_DB     := TCriticalSection.Create;

  nSessionIdx := 1;
  n47328C     := 1;
  nMemoHeigh  := Memo1.Height;
  Config.GateList := TList.Create;
  Config.SessionList := TGList.Create;
  Config.ServerNameList := TStringList.Create;
  SList_0344  := TStringList.Create;
  Config.AccountCostList := TQuickList.Create;
  Config.IPaddrCostList := TQuickList.Create;
  ParseList   := TThreadParseList.Create(True);
  LoadAddrTable(Config);
  MonitorGrid.Cells[0, 0] := '服務器名';
  MonitorGrid.Cells[1, 0] := '用戶數';
  MonitorGrid.Cells[2, 0] := '狀態';
  MonitorGrid.Cells[3, 0] := '服務器名';
  MonitorGrid.Cells[4, 0] := '用戶數';
  MonitorGrid.Cells[5, 0] := '狀態';
end;

//00469598
procedure TFrmMain.FormDestroy(Sender: TObject);
var
  i, ii:    integer;
  GateInfo: pTGateInfo;
  UserInfo: pTUserInfo;
  Config:   pTConfig;
begin
  Config := @g_Config;
  StopService(Config);
  if AccountDB <> nil then AccountDB.Free;
  for i := 0 to Config.GateList.Count - 1 do begin
    GateInfo := Config.GateList.Items[i];
    for ii := 0 to GateInfo.UserList.Count - 1 do begin
      UserInfo := GateInfo.UserList.Items[i];
      Dispose(UserInfo);
    end;
    GateInfo.UserList.Free;
    Dispose(GateInfo);
  end;
  Config.GateList.Free;
  Config.SessionList.Free;
  Config.ServerNameList.Free;
  SList_0344.Free;
  CS_DB.Free;
end;
//0046A7F4
procedure TFrmMain.ExecTimerTimer(Sender: TObject);
var
  Config: pTConfig;
begin
  Config := @g_Config;
  if bo470D20 and not g_boDataDBReady then exit;
  bo470D20 := True;
  try
    ProcessGate(Config);
  finally
    bo470D20 := False;
  end;
end;
//0046D178
procedure TFrmMain.Memo1DblClick(Sender: TObject);
begin
  OpenRouteConfig();

end;

//0046A9BC
procedure TFrmMain.Timer1Timer(Sender: TObject);
var
  I:      integer;
  Config: pTConfig;
begin
  Config := @g_Config;
  Label1.Caption := IntToStr(Config.dwProcessGateTime);
  CkLogin.Checked := GSocket.Socket.Connected;
  CkLogin.Caption := '連接 (' + IntToStr(GSocket.Socket.ActiveConnections) + ')';
  LbMasCount.Caption := IntToStr(nOnlineCountMin) + '/' + IntToStr(nOnlineCountMax);
  if Memo1.Lines.Count > 2000 then Memo1.Clear;
  EnterCriticalSection(g_OutMessageCS);
  try
    for I := 0 to g_MainMsgList.Count - 1 do begin
      Memo1.Lines.Add(g_MainMsgList.Strings[i]);
    end;
    g_MainMsgList.Clear;
  finally
    LeaveCriticalSection(g_OutMessageCS);
  end;

  SessionClearKick(Config);
  SessionClearNoPayMent(Config);
end;

//0046A674
procedure TFrmMain.StartTimerTimer(Sender: TObject);
var
  Config: pTConfig;
begin
  Config := @g_Config;
  StartService(Config);

  StartTimer.Enabled := False;
  Memo1.Lines.Add('1) 正在啟動服務器...');
  Application.ProcessMessages;

  AccountDB := TFileIDDB.Create(g_sSQLString);
  ParseList.Resume;
  Memo1.Lines.Add('2) 正在等待服務器連接...');
  while (True) do begin
    Application.ProcessMessages;
    if Application.Terminated then exit;
    if FrmMasSoc.CheckReadyServers then break;
    Sleep(1);
  end;
  GSocket.Active  := False;
  GSocket.Address := Config.sGateAddr;
  GSocket.Port    := Config.nGatePort;
  GSocket.Active  := True;
  Memo1.Lines.Add('3) 服務器啟動完成...');
  ExecTimer.Enabled := True;
  if Config.boMinimize then Application.Minimize;
end;



procedure TFrmMain.MENU_CONTROL_EXITClick(Sender: TObject);
begin
  Close;
end;

procedure TFrmMain.FormCloseQuery(Sender: TObject; var CanClose: boolean);
//0x0046DDB0
var
  Config: pTConfig;
resourcestring
  sExitMsg = '是否確認停止登錄服務器 ?';
  sExitTitle = '確認信息';
begin
  Config := @g_Config;
  if Config.boRemoteClose then exit;
  if MessageBox(Handle, PChar(sExitMsg), PChar(sExitTitle), MB_YESNO +
    MB_ICONQUESTION) = mrYes then CanClose := True
  else
    CanClose := False;
end;


//0046DB40
procedure TFrmMain.BtnViewClick(Sender: TObject);
var
  Config: pTConfig;
begin
  Config := @g_Config;
  try
    CS_DB.Enter;
    FrmAccountView.ListBox1.Items := Config.AccountCostList;
    FrmAccountView.ListBox2.Items := Config.IPaddrCostList;
  finally
    CS_DB.Leave;
  end;
  FrmAccountView.ShowModal;
end;

procedure TFrmMain.CountLogTimerTimer(Sender: TObject);
var
  sLogMsg: string;
  Config:  pTConfig;
resourcestring
  sFormatMsg = '%d/%d';
begin
  Config  := @g_Config;
  sLogMsg := format(sFormatMsg, [nOnlineCountMin, nOnlineCountMax]);
  SaveContLogMsg(Config, sLogMsg);
  nOnlineCountMax := 0;
end;

procedure TFrmMain.BtnShowServerUsersClick(Sender: TObject);
var
  I: integer;
begin
  for I := 0 to nUserLimit - 1 do begin
    MainOutMessage(UserLimit[I].sServerName + ' ' +
      IntToStr(UserLimit[i].nLimitCountMin) + '/' +
      IntToStr(UserLimit[i].nLimitCountMax));
  end;
end;
//0046ECB4
procedure TFrmMain.MonitorTimerTimer(Sender: TObject);
var
  I:    integer;
  nCol: integer;
  sServerName: string;
  ServerList: TList;
  MsgServer: pTMsgServerInfo;
begin
  try
    ServerList := FrmMasSoc.m_ServerList;
    if (ServerList.Count div 2) < 2 then begin
      MonitorGrid.RowCount    := 2;
      MonitorGrid.Cells[0, 1] := '';
      MonitorGrid.Cells[1, 1] := '';
      MonitorGrid.Cells[2, 1] := '';
      MonitorGrid.Cells[3, 1] := '';
      MonitorGrid.Cells[4, 1] := '';
      MonitorGrid.Cells[5, 1] := '';
    end else begin
      MonitorGrid.RowCount := ((ServerList.Count div 2) + 1) + (ServerList.Count mod 2);
    end; //0046ED54
    for I := 0 to ServerList.Count - 1 do begin
      nCol      := (I mod 2) * 3;
      MsgServer := ServerList.Items[I];
      sServerName := MsgServer.sServerName;
      if sServerName <> '' then begin
        if MsgServer.nServerIndex = 99 then
          MonitorGrid.Cells[nCol, (I div 2 + 1)] := sServerName + ' [DB]'
        else
          MonitorGrid.Cells[nCol, (I div 2 + 1)] :=
            sServerName + ' ' + IntToStr(MsgServer.nServerIndex);
        MonitorGrid.Cells[nCol + 1, (I div 2 + 1)] := IntToStr(MsgServer.nOnlineCount);
        if (GetTickCount - MsgServer.dwKeepAliveTick) < 30000 then
          MonitorGrid.Cells[nCol + 2, (I div 2 + 1)] := '正常'
        else
          MonitorGrid.Cells[nCol + 2, (I div 2 + 1)] := '超時';
      end else begin //0046EEF2
        MonitorGrid.Cells[nCol, (I div 2 + 1)]     := '-';
        MonitorGrid.Cells[nCol + 1, (I div 2 + 1)] := '-';
        MonitorGrid.Cells[nCol + 2, (I div 2 + 1)] := '-';
      end;
    end;
  except
    MainOutMessage('TFrmMain.MonitorTimerTimer');
  end;
end;
//0046A178
function IsPayMent(Config: pTConfig; sIPaddr, sAccount: string): boolean;
begin
  Result := False;
  try
    CS_DB.Enter;
    if (Config.AccountCostList.GetIndex(sAccount) >= 0) or
      (Config.IPaddrCostList.GetIndex(sIPaddr) >= 0) then Result := True;
  finally
    CS_DB.Leave;
  end;
end;
//0046A23C
procedure CloseUser(Config: pTConfig; sAccount: string; nSessionID: integer);
var
  ConnInfo: pTConnInfo;
  I: integer;
begin
  Config.SessionList.Lock;
  try
    for I := Config.SessionList.Count - 1 downto 0 do begin
      ConnInfo := Config.SessionList.Items[I];
      if (ConnInfo.sAccount = sAccount) or (ConnInfo.nSessionID = nSessionID) then
      begin
        FrmMasSoc.SendServerMsg(SS_CLOSESESSION, ConnInfo.sServerName,
          ConnInfo.sAccount + '/' + IntToStr(ConnInfo.nSessionID));
        Dispose(ConnInfo);
        Config.SessionList.Delete(I);
      end;
    end;
  finally
    Config.SessionList.UnLock;
  end;
end;

procedure ProcessGate(Config: pTConfig);
var
  I:  integer;
  II: integer;
  GateInfo: pTGateInfo;
  UserInfo: pTUserInfo;
begin
  EnterCriticalSection(Config.GateCriticalSection);
  try
    Config.dwProcessGateTick := GetTickCount();
    I := 0;
    while (True) do begin
      if Config.GateList.Count <= I then break;
      GateInfo := Config.GateList.Items[I];
      if GateInfo.sReceiveMsg <> '' then begin
        DecodeGateData(Config, GateInfo);
        Config.sGateIPaddr := GateInfo.sIPaddr;
        II := 0;
        while (True) do begin
          if GateInfo.UserList.Count <= II then break;
          UserInfo := GateInfo.UserList.Items[II];
          if UserInfo.sReceiveMsg <> '' then DecodeUserData(Config, UserInfo);
          Inc(II);
        end;
      end;
      Inc(I);
    end;
    if Config.dwProcessGateTime < Config.dwProcessGateTick then
      Config.dwProcessGateTime := GetTickCount - Config.dwProcessGateTick;
    if Config.dwProcessGateTime > 100 then Dec(Config.dwProcessGateTime, 100);
  finally
    LeaveCriticalSection(Config.GateCriticalSection);
  end;
end;

//0046AC08
procedure DecodeGateData(Config: pTConfig; GateInfo: pTGateInfo);
var
  nCount: integer;
  sMsg:   string;
  sSockIndex: string;
  sData:  string;
  Code:   char;
begin
  try
    nCount := 0;
    while (True) do begin
      if TagCount(GateInfo.sReceiveMsg, '$') <= 0 then break;
      GateInfo.sReceiveMsg := ArrestStringEx(GateInfo.sReceiveMsg, '%', '$', sMsg);
      if sMsg <> '' then begin
        Code := sMsg[1];
        sMsg := Copy(sMsg, 2, Length(sMsg) - 1);
        case Code of
          '-': begin
            SendKeepAlivePacket(GateInfo.Socket);
            GateInfo.dwKeepAliveTick := GetTickCount();
          end;
          'A': begin
            sData := GetValidStr3(sMsg, sSockIndex, ['/']);
            ReceiveSendUser(Config, sSockIndex, GateInfo, sData);
          end;
          'O': begin
            sData := GetValidStr3(sMsg, sSockIndex, ['/']);
            ReceiveOpenUser(Config, sSockIndex, sData, GateInfo);
          end;
          'X': begin
            sSockIndex := sMsg;
            ReceiveCloseUser(Config, sSockIndex, GateInfo);
          end;
        end;
      end else begin //0046AD85
        if nCount >= 1 then GateInfo.sReceiveMsg := '';
        Inc(nCount);
      end;
    end;
  except
    MainOutMessage('[Exception] TFrmMain.DecodeGateData');
  end;
end;
//0046A63C
procedure SendKeepAlivePacket(Socket: TCustomWinSocket);
begin
  if Socket.Connected then Socket.SendText('%++$');
end;
//0046B058
procedure ReceiveCloseUser(Config: pTConfig; sSockIndex: string; GateInfo: pTGateInfo);
var
  UserInfo: pTUserInfo;
  I: integer;
resourcestring
  sCloseMsg = 'Close: %s';
begin
  for I := 0 to GateInfo.UserList.Count - 1 do begin
    UserInfo := GateInfo.UserList.Items[I];
    if UserInfo.sSockIndex = sSockIndex then begin
      if Config.boShowDetailMsg then
        MainOutMessage(format(sCloseMsg, [UserInfo.sUserIPaddr]));
      if not UserInfo.boSelServer then SessionDel(Config, UserInfo.nSessionID);
      Dispose(UserInfo);
      GateInfo.UserList.Delete(I);
      break;
    end;
  end;
end;
//0046AE3C
procedure ReceiveOpenUser(Config: pTConfig; sSockIndex, sIPaddr: string;
  GateInfo: pTGateInfo);
var
  UserInfo: pTUserInfo;
  I: integer;
  sGateIPaddr: string;
  sUserIPaddr: string;
resourcestring
  sOpenMsg = 'Open: %s/%s';
begin
  sGateIPaddr := GetValidStr3(sIPaddr, sUserIPaddr, ['/']);
  try
    for I := 0 to GateInfo.UserList.Count - 1 do begin
      UserInfo := GateInfo.UserList.Items[I];
      if UserInfo.sSockIndex = sSockIndex then begin
        UserInfo.sUserIPaddr  := sUserIPaddr;
        UserInfo.sGateIPaddr  := sGateIPaddr;
        UserInfo.sAccount     := '';
        UserInfo.nSessionID   := 0;
        UserInfo.sReceiveMsg  := '';
        UserInfo.dwTime5C     := GetTickCount();
        UserInfo.dwClientTick := GetTickCount();
        exit;
      end;
    end;
    New(UserInfo);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美美哒免费高清在线观看视频一区二区| 国产精品一级二级三级| 日韩一级片在线观看| 日本韩国欧美一区| 91丨porny丨首页| caoporn国产精品| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 欧美sm极限捆绑bd| 欧美一区二区播放| 久久综合久久鬼色| 国产无人区一区二区三区| 国产亚洲福利社区一区| 国产精品久久久久久亚洲毛片| 欧美精品一区二区久久久| 欧美一区二区在线免费观看| 日韩手机在线导航| 久久精品一区二区三区不卡| 国产精品免费丝袜| 亚洲精品福利视频网站| 一级精品视频在线观看宜春院| 午夜精品视频一区| 精品一区二区国语对白| 成人免费高清在线| 欧美艳星brazzers| 日韩欧美综合一区| 国产精品超碰97尤物18| 一二三区精品视频| 国产乱一区二区| 在线观看av一区| 26uuu国产电影一区二区| 国产精品久久久久国产精品日日| 一区二区三区国产| 久久se精品一区精品二区| 国产91精品露脸国语对白| 欧美性猛交xxxx黑人交| 久久久亚洲欧洲日产国码αv| 中文字幕亚洲区| 日韩极品在线观看| 成人午夜av影视| 日韩视频国产视频| 亚洲美女视频在线观看| 紧缚捆绑精品一区二区| 在线视频一区二区三区| 久久中文娱乐网| 视频一区欧美日韩| 成人h动漫精品| 日韩限制级电影在线观看| 中文字幕一区二区三区乱码在线 | 亚洲综合免费观看高清完整版在线| 日韩精品久久理论片| 粉嫩蜜臀av国产精品网站| 在线播放亚洲一区| 中文字幕人成不卡一区| 日本一区免费视频| 日韩精品一区第一页| 豆国产96在线|亚洲| 日韩欧美你懂的| 日韩和的一区二区| 欧美丝袜丝nylons| 亚洲免费观看高清在线观看| 国产精品亚洲专一区二区三区| 成人av午夜电影| 亚洲国产高清在线| 国产精品资源在线| 日韩一级黄色大片| 日韩av成人高清| 欧美日韩视频在线一区二区| 一区二区三区中文字幕| 99国产一区二区三精品乱码| 国产欧美日本一区视频| 国产黑丝在线一区二区三区| 欧美电视剧在线观看完整版| 日韩电影在线一区| 欧美一区二区在线免费观看| 天天色综合成人网| 91精品综合久久久久久| 婷婷六月综合亚洲| 日韩午夜在线观看视频| 久久99精品久久久久久动态图| 日韩一区二区三区在线视频| 麻豆精品久久精品色综合| 欧美一级二级在线观看| 麻豆久久一区二区| 久久久亚洲国产美女国产盗摄 | 久久综合九色综合97_久久久| 日韩制服丝袜av| 日韩免费性生活视频播放| 麻豆视频一区二区| 国产亚洲制服色| 成人av资源网站| 亚洲欧美精品午睡沙发| 色老综合老女人久久久| 亚洲成人一二三| 日韩精品一区二区三区在线| 毛片av一区二区| 久久精品欧美日韩| av成人动漫在线观看| 亚洲国产成人av| 久久亚洲精品国产精品紫薇| 国产白丝网站精品污在线入口| 中文字幕成人在线观看| 欧美在线看片a免费观看| 蜜桃av噜噜一区| 国产精品黄色在线观看| 在线不卡中文字幕| 成人性生交大片免费看中文网站| 一区二区三区在线免费观看| 欧美一区中文字幕| 成人av网站在线| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产清纯美女被跳蛋高潮一区二区久久w| 色综合天天综合网天天狠天天| 视频在线观看国产精品| 日韩欧美精品在线视频| 成人免费黄色在线| 午夜久久电影网| 国产精品乱码妇女bbbb| 91精品啪在线观看国产60岁| voyeur盗摄精品| 麻豆91免费观看| 亚洲第一狼人社区| 日本一区二区三区电影| 欧美久久久久中文字幕| 91免费版pro下载短视频| 九九九精品视频| 午夜精品成人在线| 亚洲欧美日本韩国| 国产精品素人一区二区| 欧美α欧美αv大片| 精品婷婷伊人一区三区三| 懂色av一区二区三区免费观看 | 一本到不卡精品视频在线观看| 精品综合久久久久久8888| 亚洲成人www| 一区二区三区中文字幕精品精品 | 成人黄色电影在线| 韩国一区二区在线观看| 日韩电影免费在线看| 亚洲成人先锋电影| 一区二区三区美女| 亚洲精品精品亚洲| 亚洲欧洲国产日本综合| 国产精品久久久久精k8| 国产精品无人区| 日本一区二区视频在线观看| 久久精品夜色噜噜亚洲a∨| 精品久久久久久无| 日韩免费看的电影| 日韩欧美的一区二区| 777奇米成人网| 欧美一激情一区二区三区| 欧美日韩1234| 日韩亚洲欧美一区| 精品国产伦一区二区三区观看方式 | www.日韩在线| 国产麻豆成人精品| 久久精品国产久精国产爱| 久久精品国产**网站演员| 看国产成人h片视频| 国产一区欧美二区| 福利91精品一区二区三区| jizz一区二区| 欧美艳星brazzers| 91精品国产综合久久福利软件| 91福利区一区二区三区| 欧美天堂亚洲电影院在线播放| 欧美在线观看你懂的| 欧美精品自拍偷拍动漫精品| 欧美α欧美αv大片| 欧美经典一区二区三区| 亚洲手机成人高清视频| 亚洲一区二区黄色| 久久www免费人成看片高清| 丰满岳乱妇一区二区三区| 色综合咪咪久久| 日韩三级av在线播放| 国产欧美视频在线观看| 亚洲精品视频免费观看| 日韩精品电影在线| 粉嫩av一区二区三区| 欧美日韩一区二区在线观看视频| 91精品国产高清一区二区三区 | 午夜精品福利一区二区三区av| 美女一区二区三区| www.综合网.com| 69p69国产精品| 国产精品视频麻豆| 亚洲国产精品欧美一二99| 国产黄人亚洲片| 欧美精品一二三四| 国产精品视频一二三| 日日摸夜夜添夜夜添国产精品| 国产精品一二三| 在线播放中文字幕一区| 国产精品久久久久一区二区三区| 日韩精品一级中文字幕精品视频免费观看 | 99久久伊人网影院| 91精品国产福利| 亚洲精品中文在线影院| 久久91精品久久久久久秒播|