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

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

?? idsoccli.pas

?? FIR引擎最新源碼+注冊
?? PAS
字號:
unit IDSocCli;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics,
  Controls, Forms, Dialogs, StdCtrls, ExtCtrls, JSocket, Grobal2, DBShare, IniFiles, Common;
type
  TFrmIDSoc = class(TForm)
    IDSocket: TClientSocket;
    Timer1: TTimer;
    KeepAliveTimer: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure IDSocketError(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure IDSocketRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure KeepAliveTimerTimer(Sender: TObject);
    procedure IDSocketConnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure IDSocketDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
  private
    GlobaSessionList: TList; //0x2D8
    m_sSockMsg: string; //0x2E4
    sIDAddr: string;
    nIDPort: Integer;
    procedure ProcessSocketMsg;
    procedure ProcessAddSession(sData: string);
    procedure ProcessDelSession(sData: string);
    procedure ProcessGetOnlineCount(sData: string);

    procedure SendKeepAlivePacket();
    { Private declarations }
  public
    procedure SendSocketMsg(wIdent: Word; sMsg: string);
    function CheckSession(sAccount, sIPaddr: string;
      nSessionID: Integer): Boolean;
    function CheckSessionLoadRcd(sAccount, sIPaddr: string; nSessionID: Integer; var boFoundSession: Boolean): Boolean;
    function SetSessionSaveRcd(sAccount: string): Boolean;
    procedure SetGlobaSessionNoPlay(nSessionID: Integer);
    procedure SetGlobaSessionPlay(nSessionID: Integer);
    function GetGlobaSessionStatus(nSessionID: Integer): Boolean;
    procedure CloseSession(sAccount: string; nSessionID: Integer); //關(guān)閉全局會話
    procedure OpenConnect();
    procedure CloseConnect();
    function GetSession(sAccount, sIPaddr: string): Boolean;
    { Public declarations }
  end;

var
  FrmIDSoc: TFrmIDSoc;

implementation

uses HUtil32, UsrSoc;
{$R *.DFM}

procedure TFrmIDSoc.FormCreate(Sender: TObject);
//0x004A128C
//var
  //Conf: TIniFile;
begin
  { Conf := TIniFile.Create(sConfFileName);
   if Conf <> nil then begin
     sIDAddr := Conf.ReadString('Server', 'IDSAddr', sIDServerAddr);
     nIDPort := Conf.ReadInteger('Server', 'IDSPort', nIDServerPort);
     Conf.Free;
   end;  }
  GlobaSessionList := TList.Create;
  m_sSockMsg := '';
end;

procedure TFrmIDSoc.FormDestroy(Sender: TObject);
var
  i: Integer;
  GlobaSessionInfo: pTGlobaSessionInfo;
begin
  for i := 0 to GlobaSessionList.Count - 1 do begin
    GlobaSessionInfo := GlobaSessionList.Items[i];
    Dispose(GlobaSessionInfo);
  end;
  GlobaSessionList.Free;
end;

procedure TFrmIDSoc.Timer1Timer(Sender: TObject);
begin
  if (IDSocket.Address <> '') and not (IDSocket.Active) then
    IDSocket.Active := True;
end;

procedure TFrmIDSoc.IDSocketRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  m_sSockMsg := m_sSockMsg + Socket.ReceiveText;
  if Pos(')', m_sSockMsg) > 0 then begin
    ProcessSocketMsg();
  end;
end;

procedure TFrmIDSoc.ProcessSocketMsg();
var
  sScoketText: string;
  sData: string;
  sCode: string;
  sBody: string;
  nIdent: Integer;
begin
  sScoketText := m_sSockMsg;
  while (Pos(')', sScoketText) > 0) do begin
    sScoketText := ArrestStringEx(sScoketText, '(', ')', sData);
    if sData = '' then break;
    sBody := GetValidStr3(sData, sCode, ['/']);
    nIdent := Str_ToInt(sCode, 0);
    case nIdent of
      SS_OPENSESSION {100}: ProcessAddSession(sBody);
      SS_CLOSESESSION {101}: ProcessDelSession(sBody);
      SS_KEEPALIVE {104}: ProcessGetOnlineCount(sBody);
    end;
  end;
  m_sSockMsg := sScoketText;
  //MainOutMessage('服務(wù)器已啟動...');
end;

procedure TFrmIDSoc.SendSocketMsg(wIdent: Word; sMsg: string);
var
  sSendText: string;
resourcestring
  sFormatMsg = '(%d/%s)';
begin
  sSendText := format(sFormatMsg, [wIdent, sMsg]);
  if IDSocket.Socket.Connected then
    IDSocket.Socket.SendText(sSendText);
end;

function TFrmIDSoc.CheckSession(sAccount, sIPaddr: string;
  nSessionID: Integer): Boolean;
var
  i: Integer;
  GlobaSessionInfo: pTGlobaSessionInfo;
begin
  g_CheckCode.dwThread0 := 1001800;
  Result := False;
  for i := 0 to GlobaSessionList.Count - 1 do begin
    GlobaSessionInfo := GlobaSessionList.Items[i];
    if GlobaSessionInfo <> nil then begin
      if (GlobaSessionInfo.sAccount = sAccount) and (GlobaSessionInfo.nSessionID = nSessionID) then begin
        Result := True;
        break;
      end;
    end;
  end;
  g_CheckCode.dwThread0 := 1001801;
end;

function TFrmIDSoc.CheckSessionLoadRcd(sAccount, sIPaddr: string; nSessionID: Integer; var boFoundSession: Boolean): Boolean;
var
  i: Integer;
  GlobaSessionInfo: pTGlobaSessionInfo;
begin
  g_CheckCode.dwThread0 := 1001900;
  Result := False;
  boFoundSession := False;
  for i := 0 to GlobaSessionList.Count - 1 do begin
    GlobaSessionInfo := GlobaSessionList.Items[i];
    if GlobaSessionInfo <> nil then begin
      if (GlobaSessionInfo.sAccount = sAccount) and (GlobaSessionInfo.nSessionID = nSessionID) then begin
        boFoundSession := True;
        if not GlobaSessionInfo.boLoadRcd then begin
          GlobaSessionInfo.boLoadRcd := True;
          Result := True;
        end;
        break;
      end;
    end;
  end;
  g_CheckCode.dwThread0 := 1001901;
end;

function TFrmIDSoc.SetSessionSaveRcd(sAccount: string): Boolean;
var
  i: Integer;
  GlobaSessionInfo: pTGlobaSessionInfo;
begin
  g_CheckCode.dwThread0 := 1002500;
  Result := False;
  for i := 0 to GlobaSessionList.Count - 1 do begin
    GlobaSessionInfo := GlobaSessionList.Items[i];
    if GlobaSessionInfo <> nil then begin
      if (GlobaSessionInfo.sAccount = sAccount) then begin
        GlobaSessionInfo.boLoadRcd := False;
        Result := True;
      end;
    end;
  end;
  g_CheckCode.dwThread0 := 1002501;
end;

procedure TFrmIDSoc.SetGlobaSessionNoPlay(nSessionID: Integer);
var
  i: Integer;
  GlobaSessionInfo: pTGlobaSessionInfo;
begin
  g_CheckCode.dwThread0 := 1002300;
  for i := 0 to GlobaSessionList.Count - 1 do begin
    GlobaSessionInfo := GlobaSessionList.Items[i];
    if GlobaSessionInfo <> nil then begin
      if (GlobaSessionInfo.nSessionID = nSessionID) then begin
        GlobaSessionInfo.boStartPlay := False;
        break;
      end;
    end;
  end;
  g_CheckCode.dwThread0 := 1002301;
end;

procedure TFrmIDSoc.SetGlobaSessionPlay(nSessionID: Integer);
var
  i: Integer;
  GlobaSessionInfo: pTGlobaSessionInfo;
begin
  g_CheckCode.dwThread0 := 1002400;
  for i := 0 to GlobaSessionList.Count - 1 do begin
    GlobaSessionInfo := GlobaSessionList.Items[i];
    if GlobaSessionInfo <> nil then begin
      if (GlobaSessionInfo.nSessionID = nSessionID) then begin
        GlobaSessionInfo.boStartPlay := True;
        break;
      end;
    end;
  end;
  g_CheckCode.dwThread0 := 1002401;
end;

function TFrmIDSoc.GetGlobaSessionStatus(nSessionID: Integer): Boolean;
var
  i: Integer;
  GlobaSessionInfo: pTGlobaSessionInfo;
begin
  Result := False;
  for i := 0 to GlobaSessionList.Count - 1 do begin
    GlobaSessionInfo := GlobaSessionList.Items[i];
    if GlobaSessionInfo <> nil then begin
      if (GlobaSessionInfo.nSessionID = nSessionID) then begin
        Result := GlobaSessionInfo.boStartPlay;
        break;
      end;
    end;
  end;
end;

procedure TFrmIDSoc.CloseSession(sAccount: string; nSessionID: Integer);
var
  i: Integer;
  GlobaSessionInfo: pTGlobaSessionInfo;
begin
  for i :=GlobaSessionList.Count - 1 downto 0 do begin
    GlobaSessionInfo := GlobaSessionList.Items[i];
    if GlobaSessionInfo <> nil then begin
      if (GlobaSessionInfo.nSessionID = nSessionID) then begin
        if GlobaSessionInfo.sAccount = sAccount then begin
          GlobaSessionList.Delete(i);
          Dispose(GlobaSessionInfo);
          break;
        end;
      end;
    end;
  end;
end;

procedure TFrmIDSoc.IDSocketError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
  ErrorCode := 0;
  Socket.Close;
  IDSocketConnected := False;
  ID_sRemoteAddress := '';
  ID_nRemotePort := 0;
end;

procedure TFrmIDSoc.ProcessAddSession(sData: string);
var
  sAccount, s10, s14, s18, sIPaddr: string;
  GlobaSessionInfo: pTGlobaSessionInfo;
begin
  g_CheckCode.dwThread0 := 1001600;
  sData := GetValidStr3(sData, sAccount, ['/']);
  sData := GetValidStr3(sData, s10, ['/']);
  sData := GetValidStr3(sData, s14, ['/']);
  sData := GetValidStr3(sData, s18, ['/']);
  sData := GetValidStr3(sData, sIPaddr, ['/']);
  New(GlobaSessionInfo);
  GlobaSessionInfo.sAccount := sAccount;
  GlobaSessionInfo.sIPaddr := sIPaddr;
  GlobaSessionInfo.nSessionID := Str_ToInt(s10, 0);
  GlobaSessionInfo.n24 := Str_ToInt(s14, 0);
  GlobaSessionInfo.boStartPlay := False;
  GlobaSessionInfo.boLoadRcd := False;
  GlobaSessionInfo.dwAddTick := GetTickCount();
  GlobaSessionInfo.dAddDate := Now();
  GlobaSessionList.Add(GlobaSessionInfo);
  g_CheckCode.dwThread0 := 1001601;
  //MainOutMessage('TFrmIDSoc.ProcessAddSession.nSessionID: '+s10);
end;

procedure TFrmIDSoc.ProcessDelSession(sData: string);
var
  sAccount: string;
  i, nSessionID: Integer;
  GlobaSessionInfo: pTGlobaSessionInfo;
begin
  g_CheckCode.dwThread0 := 1001700;
  sData := GetValidStr3(sData, sAccount, ['/']);
  nSessionID := Str_ToInt(sData, 0);
  for i :=GlobaSessionList.Count - 1 downto 0 do begin
    GlobaSessionInfo := GlobaSessionList.Items[i];
    if GlobaSessionInfo <> nil then begin
      if (GlobaSessionInfo.nSessionID = nSessionID) and (GlobaSessionInfo.sAccount = sAccount) then begin
        GlobaSessionList.Delete(i);
        Dispose(GlobaSessionInfo);
        break;
      end;
    end;
  end;
  g_CheckCode.dwThread0 := 1001701;
end;

procedure TFrmIDSoc.SendKeepAlivePacket;
begin
  if IDSocket.Socket.Connected then begin
    IDSocket.Socket.SendText('(' + IntToStr(SS_SERVERINFO) + '/' + sServerName + '/' + '99' + '/' + IntToStr(FrmUserSoc.GetUserCount) + ')');
  end;
end;

procedure TFrmIDSoc.CloseConnect;
begin
  KeepAliveTimer.Enabled := False;
  IDSocket.Active := False;
end;

function TFrmIDSoc.GetSession(sAccount, sIPaddr: string): Boolean;
var
  i: Integer;
  GlobaSessionInfo: pTGlobaSessionInfo;
begin
  g_CheckCode.dwThread0 := 1002200;
  Result := False;
  for i := 0 to GlobaSessionList.Count - 1 do begin
    GlobaSessionInfo := GlobaSessionList.Items[i];
    if GlobaSessionInfo <> nil then begin
      if (GlobaSessionInfo.sAccount = sAccount) and (GlobaSessionInfo.sIPaddr = sIPaddr) then begin
        Result := True;
        break;
      end;
    end;
  end;
  g_CheckCode.dwThread0 := 1002201;
end;

procedure TFrmIDSoc.OpenConnect;
begin
  IDSocket.Active := False;
  IDSocket.Host := sIDServerAddr;
  IDSocket.Address := sIDServerAddr;
  IDSocket.Port := nIDServerPort;
  IDSocket.Active := True;
  KeepAliveTimer.Enabled := True;
end;

procedure TFrmIDSoc.KeepAliveTimerTimer(Sender: TObject);
begin
  SendKeepAlivePacket();
  dwKeepIDAliveTick := GetTickCount;
end;

procedure TFrmIDSoc.ProcessGetOnlineCount(sData: string);
begin

end;

procedure TFrmIDSoc.IDSocketConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  IDSocketConnected := True;
  ID_sRemoteAddress := Socket.RemoteAddress;
  ID_nRemotePort := Socket.LocalPort;
  MainOutMessage('賬號服務(wù)器連接成功...');
end;

procedure TFrmIDSoc.IDSocketDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  IDSocketConnected := False;
  ID_sRemoteAddress := '';
  ID_nRemotePort := 0;
end;

end.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三区免费完整视频在线观看| 国产精品久久久久一区| 三级在线观看一区二区| 欧美日韩视频一区二区| 天堂av在线一区| 日韩精品一区二区三区在线播放| 免费xxxx性欧美18vr| 日韩精品一区二区三区蜜臀| 另类的小说在线视频另类成人小视频在线 | 欧美区在线观看| 日韩av一区二区三区四区| 337p亚洲精品色噜噜噜| 韩国女主播一区| 国产午夜精品理论片a级大结局| 国产99久久久国产精品免费看| 国产精品视频九色porn| 91美女片黄在线观看| 天天综合日日夜夜精品| 日韩视频一区在线观看| 国产精品一级片在线观看| 日韩一区欧美小说| 欧美日韩精品欧美日韩精品一| 免费观看一级欧美片| 国产色91在线| 欧美婷婷六月丁香综合色| 久久er99热精品一区二区| 国产精品色婷婷| 欧美亚洲禁片免费| 久久电影网电视剧免费观看| 中文字幕一区二区三区蜜月| 欧美电影一区二区| 高清不卡在线观看| 五月激情综合网| 中文天堂在线一区| 欧美一区二区三区白人| 成a人片亚洲日本久久| 亚洲成在人线免费| 国产欧美精品一区aⅴ影院 | 久久不见久久见免费视频1| 亚洲国产成人在线| 日韩亚洲欧美在线观看| 97久久精品人人做人人爽50路 | 日韩欧美激情一区| 99精品视频在线免费观看| 免费观看久久久4p| 亚洲四区在线观看| 久久一区二区视频| 欧美久久久久久久久中文字幕| 成人的网站免费观看| 蜜臀久久99精品久久久久久9| 亚洲欧美日韩电影| 国产三级精品三级| 日韩一级精品视频在线观看| 欧美性生交片4| av一区二区三区在线| 国产综合成人久久大片91| 午夜一区二区三区在线观看| 国产精品国产精品国产专区不蜜| 日韩一级高清毛片| 在线观看91av| 欧美日韩一区视频| 97se亚洲国产综合自在线| 国产成人午夜片在线观看高清观看| 亚洲bdsm女犯bdsm网站| 亚洲精品乱码久久久久久久久| 久久免费美女视频| 精品国产乱码久久久久久久| 91精品国产综合久久精品图片| 欧美做爰猛烈大尺度电影无法无天| 大陆成人av片| 国产福利一区二区三区| 国产一区欧美二区| 另类欧美日韩国产在线| 免费精品视频最新在线| 日本人妖一区二区| 日韩av一区二区在线影视| 一卡二卡欧美日韩| 伊人开心综合网| 亚洲影院久久精品| 亚洲成a人在线观看| 亚洲成a人片综合在线| 五月激情综合网| 日本最新不卡在线| 久久99蜜桃精品| 国精产品一区一区三区mba视频 | 狠狠色丁香久久婷婷综| 日本午夜一本久久久综合| 亚洲成人激情社区| 午夜视频在线观看一区二区| 丝袜美腿亚洲综合| 日本不卡一区二区三区| 另类小说色综合网站| 国产在线麻豆精品观看| 国产福利一区在线观看| 成人av网站在线观看| 色猫猫国产区一区二在线视频| 一本到三区不卡视频| 欧美日韩国产另类不卡| 日韩一区二区三区在线| 久久久久久**毛片大全| 国产精品国产三级国产a| 亚洲激情网站免费观看| 首页亚洲欧美制服丝腿| 国产一区二区三区四区五区美女 | 欧美亚洲免费在线一区| 欧美人体做爰大胆视频| 26uuu亚洲综合色| 国产精品国产三级国产专播品爱网| 亚洲啪啪综合av一区二区三区| 亚洲影院在线观看| 久草在线在线精品观看| aaa亚洲精品| 欧美一区二区三区四区高清| 久久久久久免费网| 亚洲日本电影在线| 男人的天堂久久精品| 成人免费黄色大片| 欧美精品 国产精品| 国产午夜亚洲精品午夜鲁丝片| 亚洲欧美激情视频在线观看一区二区三区| 亚洲国产日韩a在线播放性色| 精品制服美女丁香| 在线视频你懂得一区| 欧美电影免费观看高清完整版在| 欧美国产综合一区二区| 亚洲国产成人av好男人在线观看| 精品一区二区av| 在线日韩国产精品| 国产无人区一区二区三区| 亚洲国产综合色| 国产成人在线免费| 制服.丝袜.亚洲.中文.综合| 国产精品网站导航| 日韩成人免费电影| 色婷婷亚洲一区二区三区| 精品免费国产二区三区| 亚洲图片欧美一区| 不卡一区二区在线| 2020国产精品| 日产精品久久久久久久性色| 99精品久久只有精品| 欧美tk—视频vk| 视频精品一区二区| 色婷婷久久久综合中文字幕| 国产午夜三级一区二区三| 日韩精品电影在线| 欧美吞精做爰啪啪高潮| 成人欧美一区二区三区视频网页| 狠狠色丁香婷婷综合| 欧美一区二视频| 一级日本不卡的影视| aa级大片欧美| 国产精品你懂的| 国产精品亚洲第一| 久久亚区不卡日本| 日韩电影免费在线| 欧美日韩国产片| 亚洲香蕉伊在人在线观| 一本一道久久a久久精品| 国产精品免费av| 国产+成+人+亚洲欧洲自线| 久久一夜天堂av一区二区三区| 男男成人高潮片免费网站| 欧美色窝79yyyycom| 亚洲最快最全在线视频| 色天天综合色天天久久| 亚洲免费av在线| 91麻豆免费观看| 亚洲免费av高清| 在线观看中文字幕不卡| 亚洲综合色丁香婷婷六月图片| 色国产精品一区在线观看| 亚洲色大成网站www久久九九| 成人动漫在线一区| 国产精品久久久久一区二区三区共| 成人白浆超碰人人人人| 中日韩av电影| 99在线精品观看| 亚洲天堂成人网| 欧美午夜影院一区| 日韩电影在线观看电影| 欧美成人乱码一区二区三区| 精品一区二区三区在线视频| 久久夜色精品一区| 成人黄色一级视频| 亚洲精品欧美综合四区| 欧美性色黄大片| 蜜桃91丨九色丨蝌蚪91桃色| 26uuu亚洲综合色| 91亚洲永久精品| 丝袜亚洲精品中文字幕一区| 欧美电视剧在线看免费| 国产成人亚洲综合色影视| 亚洲色图制服丝袜| 欧美日韩精品系列| 国产一区二区在线视频| 国产精品久久久久久久久图文区 | 在线免费观看日本欧美| 五月婷婷另类国产| 精品国产成人系列|