⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gateshare.pas

📁 原版翎风(LF)引擎(M2)源码(Delphi)
💻 PAS
字号:
unit GateShare;

interface
uses
  Windows, Messages, Classes, SysUtils, JSocket, WinSock, SyncObjs;

type
  TBlockIPMethod = (mDisconnect,mBlock,mBlockList);
  TSockaddr = record
    nIPaddr        :Integer;
    nCount         :Integer;
    dwIPCountTick1 :LongWord;
    nIPCount1      :Integer;
    dwIPCountTick2 :LongWOrd;
    nIPCount2      :Integer;
    dwDenyTick     :LongWord;
    nIPDenyCount   :Integer; 
  end;
  pTSockaddr = ^TSockaddr;
  
  procedure LoadBlockIPFile();
  procedure SendGameCenterMsg(wIdent:Word;sSendMsg:String);
  procedure SaveBlockIPList();
var
  CS_MainLog            :TCriticalSection;
  CS_FilterMsg          :TCriticalSection;
  MainLogMsgList        :TStringList;
  BlockIPList           :TList;
  TempBlockIPList       :TList;
  CurrIPaddrList        :TList;
  nIPCountLimit1        :Integer = 20;
  nIPCountLimit2        :Integer = 40;
  nShowLogLevel         :Integer = 3;

  StringList456A14      :TStringList;


  
  GateClass             :String = 'LoginGate';
  GateName              :String = '登录网关';

  TitleName             :String  = '热血传奇';
  ServerPort            :Integer = 5500;
  ServerAddr            :String  = '127.0.0.1';
  GatePort              :Integer = 7000;
  GateAddr              :String  = '0.0.0.0';

  boGateReady           :Boolean = False;
  boShowMessage         :Boolean;
  boStarted             :Boolean = False;
  boClose               :Boolean = False;
  boServiceStart        :Boolean = False;
  dwKeepAliveTick       :LongWord;
  boKeepAliveTimcOut    :Boolean = False;
  nSendMsgCount         :Integer;
  n456A2C               :Integer;
  n456A30               :Integer;
  boSendHoldTimeOut     :Boolean;
  dwSendHoldTick        :LongWord;
  boDecodeLock          :Boolean;

  nMaxConnOfIPaddr      :Integer = 10;
  BlockMethod           :TBlockIPMethod = mDisconnect;
  dwKeepConnectTimeOut  :LongWord = 60 * 1000;
  g_boDynamicIPDisMode  :Boolean = False; //用于动态IP,分机放置登录网关用,打开此模式后,网关将会把连接登录服务器的IP地址,当为服务器IP,发给登录服务器,客户端将直接使用此IP连接角色网关

  g_dwGameCenterHandle  :THandle;
  g_sNowStartGate       :String = '正在启动登录前置服务器...';
  g_sNowStartOK         :String = '启动登录前置服务器完成...';
  PosFile               :String  = '.\Config.ini';

implementation

uses Grobal2;


procedure LoadBlockIPFile();
var
  I: Integer;
  sFileName:String;
  LoadList:TStringList;
  sIPaddr:String;
  nIPaddr:Integer;
  IPaddr  :pTSockaddr;
begin
  sFileName:='.\BlockIPList.txt';
  if FileExists(sFileName) then begin
    LoadList:=TStringList.Create;
    LoadList.LoadFromFile(sFileName);
    for I := 0 to LoadList.Count - 1 do begin
      sIPaddr:=Trim(LoadList.Strings[0]);
      if sIPaddr = '' then Continue;
      nIPaddr:=inet_addr(PChar(sIPaddr));
      if nIPaddr = INADDR_NONE then Continue;
      New(IPaddr);
      FillChar(IPaddr^,SizeOf(TSockaddr),0);
      IPaddr.nIPaddr:=nIPaddr;
      BlockIPList.Add(IPaddr);
    end;
    LoadList.Free;
  end;
end;
procedure SaveBlockIPList();
var
  I:Integer;
  SaveList:TStringList;
begin
  SaveList:=TStringList.Create;
  for I := 0 to BlockIPList.Count - 1 do begin
    SaveList.Add(StrPas(inet_ntoa(TInAddr(pTSockaddr(BlockIPList.Items[I]).nIPaddr))));
  end; 
  SaveList.SaveToFile('.\BlockIPList.txt');
  SaveList.Free;
end;
procedure SendGameCenterMsg(wIdent:Word;sSendMsg:String);
var
  SendData:TCopyDataStruct;
  nParam:Integer;
begin
  nParam:=MakeLong(Word(tLoginGate),wIdent);
  SendData.cbData:=Length (sSendMsg) + 1;
  GetMem(SendData.lpData,SendData.cbData);
  StrCopy (SendData.lpData, PChar(sSendMsg));
  SendMessage(g_dwGameCenterHandle,WM_COPYDATA,nParam,Cardinal(@SendData));
  FreeMem(SendData.lpData);
end;

initialization
begin
  CS_MainLog:=TCriticalSection.Create;
  CS_FilterMsg:=TCriticalSection.Create;

  StringList456A14:=TStringList.Create;
  MainLogMsgList:=TStringList.Create;
end;

finalization
begin
  StringList456A14.Free;
  MainLogMsgList.Free;
  CS_MainLog.Free;
  CS_FilterMsg.Free;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -