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

📄 lsshare.pas

📁 传奇服务端代码 LoginSrvSQL 通讯部分
💻 PAS
字号:
unit LSShare;

interface

uses
  Windows, Messages, Classes, Dialogs, SysUtils, SyncObjs, IniFiles,
  MudUtil, SDK, Grobal2;

type
  TGateNet = record
    sIPaddr:  string;
    nPort:    integer;
    boEnable: boolean;
  end;

  TGateRoute = record
    sServerName: string;
    sTitle: string;
    sRemoteAddr: string;
    sPublicAddr: string;
    nSelIdx: integer;
    Gate: array [0..9] of TGateNet;
  end;

  TConfig = record
    IniConf:     TIniFile;
    boRemoteClose: boolean;
    sDBServer:   string[30];    //0x00475368
    nDBSPort:    integer;       //0x00475374
    sFeeServer:  string[30];    //0x0047536C
    nFeePort:    integer;       //0x00475378
    sLogServer:  string[30];    //0x00475370
    nLogPort:    integer;       //0x0047537C
    sGateAddr:   string[30];
    nGatePort:   integer;
    sServerAddr: string[30];
    nServerPort: integer;
    sMonAddr:    string[30];
    nMonPort:    integer;
    sGateIPaddr: string[30]; //当前处理的网关连接IP地址
    sFeedIDList: string[50];
    sFeedIPList: string[50];
    sCountLogDir: string[50];
    sChrLogDir:  string[50];
    g_sSQLDatabase:     String[50];
    g_sSQLHost:         String[30];
    g_sSQLUserName:     String[20];
    g_sSQLPassword:     String[20];

    boTestServer: boolean;
    boEnableMakingID: boolean;
    boDynamicIPMode: boolean;
    nReadyServers: integer;
    boMinimize: boolean;

    GateCriticalSection: TRTLCriticalSection;
    GateList:    TList;
    SessionList: TGList;
    ServerNameList: TStringList;
    AccountCostList: TQuickList;
    IPaddrCostList: TQuickList;
    boShowDetailMsg: boolean;
    dwProcessGateTick: longword;          //0x00475380
    dwProcessGateTime: longword;          //0x00475384
    nRouteCount: integer;//0x47328C
    GateRoute:   array[0..59] of TGateRoute;
  end;
  pTConfig = ^TConfig;

function CheckAccountName(sName: string): boolean;
function GetSessionID(): integer;
procedure SaveGateConfig(Config: pTConfig);
function GetGatePublicAddr(Config: pTConfig; sGateIP: string): string;
function GenSpaceString(sStr: string; nSpaceCOunt: integer): string;
procedure MainOutMessage(sMsg: string);
procedure LoadDBSetup;

var
  g_sVersion:string= 'OByiHiZdpgQOPPoF{WwYpksCu\';
  g_sUpDateTime:string= 'H_<lIxOfHO?Pl_CDqL';
  g_sProgram:string= 'OByiH^=HWrYeWaIaXcUaX^=OPPnlu_@jH<';
  g_sWebSite:string= 'o[_Qk_esYsXjWByiH^u_W\';

  g_Config: TConfig = (boRemoteClose: False;
  sDBServer: '127.0.0.1';
  nDBSPort: 16300;
  sFeeServer: '127.0.0.1';
  nFeePort: 16301;
  sLogServer: '127.0.0.1';
  nLogPort: 16301;
  sGateAddr: '0.0.0.0';
  nGatePort: 5500;
  sServerAddr: '0.0.0.0';
  nServerPort: 5600;
  sMonAddr: '0.0.0.0';
  nMonPort: 3000;

  sFeedIDList: '.\FeedIDList.txt';   //0x00470D0C
  sFeedIPList: '.\FeedIPList.txt';   //0x00470D10
  sCountLogDir: '.\CountLog\';       //0x00470D14
  sChrLogDir: '.\ChrLog\';

  g_sSQLDatabase:'mir2';
  g_sSQLHost:'127.0.0.1';
  g_sSQLUserName:'mir2';
  g_sSQLPassword:'mir2';

  boTestServer: True;
  boEnableMakingID: True;
  boDynamicIPMode: False;

  nReadyServers: 0;
  boMinimize: True;
  boShowDetailMsg: False);


  g_sSQLString :String;
//  g_sSQLString :String = 'Provider=SQLOLEDB.1;Password='+g_Config.g_sSQLPassword+';Persist Security Info=True;User ID='+g_Config.g_sSQLUserName+';Initial Catalog='+g_Config.g_sSQLDatabase+';Data Source='+g_Config.g_sSQLHost';

  //nReadyServers     :Integer;           //0x00475388
  nOnlineCountMin: integer;           //0x00475390
  nOnlineCountMax: integer;           //0x00475394
  nMemoHeigh: integer;           //0x00475398
  g_OutMessageCS: TRTLCriticalSection;
  g_MainMsgList: TStringList;       //0x0047539C
  CS_DB:   TCriticalSection;  //0x004753A0
  n4753A4: integer;           //0x004753A4
  n4753A8: integer;           //0x004753A8
  n4753B0: integer;           //0x004753B0


  n47328C: integer;

  nSessionIdx: integer;          //0x00473294

  g_n472A6C: integer;
  g_n472A70: integer;
  g_n472A74: integer;
  g_boDataDBReady: boolean;         //0x00472A78
  bo470D20:  boolean;

  nVersionDate: integer = 20011006;


  ServerAddr: array[0..99] of string[15];

implementation

uses
  HUtil32;



function CheckAccountName(sName: string): boolean; //00454384
var
  i:    integer;
  nLen: integer;
begin
  Result := False;
  if sName = '' then exit;
  Result := True;
  nLen   := length(sName);
  i      := 1;
  while (True) do begin
    if i > nLen then break;
    if (sName[i] < '0') or (sName[i] > 'z') then begin
      ;
      Result := False;
      if (sName[i] >= #$B0) and (sName[i] <= #$C8) then begin
        Inc(i);
        if i <= nLen then if (sName[i] >= #$A1) and (sName[i] <= #$FE) then
            Result := True;
      end;
      if not Result then break;
    end;
    Inc(i);
  end;
end;
//00468BDC
function GetSessionID(): integer;
begin
  Inc(nSessionIdx);
  if nSessionIdx >= High(integer) then begin
    nSessionIdx := 2;
  end;
  Result := nSessionIdx;
end;
//0046D4F4
procedure SaveGateConfig(Config: pTConfig);
var
  SaveList: TStringList;
  i, n8:    integer;
  s10, sC:  string;
begin
  SaveList := TStringList.Create;
  SaveList.Add(';No space allowed');
  SaveList.Add(GenSpaceString(';Server', 15) + GenSpaceString('Title', 15) +
    GenSpaceString('Remote', 17) + GenSpaceString('Public', 17) + 'Gate...');
  for i := 0 to Config.nRouteCount - 1 do begin
    sC := GenSpaceString(Config.GateRoute[i].sServerName, 15) +
      GenSpaceString(Config.GateRoute[i].sTitle, 15) +
      GenSpaceString(Config.GateRoute[i].sRemoteAddr, 17) +
      GenSpaceString(Config.GateRoute[i].sPublicAddr, 17);
    n8 := 0;
    while (True) do begin
      s10 := Config.GateRoute[i].Gate[n8].sIPaddr;
      if s10 = '' then break;
      if not Config.GateRoute[i].Gate[n8].boEnable then s10 := '*' + s10;
      s10 := s10 + ':' + IntToStr(Config.GateRoute[i].Gate[n8].nPort);
      sC := sC + GenSpaceString(s10, 17);
      Inc(n8);
      if n8 >= 10 then break;
    end;
    SaveList.Add(sC);
  end;
  SaveList.SaveToFile('.\!addrtable.txt');
  SaveList.Free;
end;
//0046D7F8
function GetGatePublicAddr(Config: pTConfig; sGateIP: string): string;
var
  I: integer;
begin
  Result := sGateIP;
  for I := 0 to Config.nRouteCount - 1 do begin
    if Config.GateRoute[I].sRemoteAddr = sGateIP then begin
      Result := Config.GateRoute[I].sPublicAddr;
      break;
    end;
  end;
end;
//004541C4
function GenSpaceString(sStr: string; nSpaceCount: integer): string;
var
  I: integer;
begin
  Result := sStr + ' ';
  for I := 1 to nSpaceCount - Length(sStr) do begin
    Result := Result + ' ';
  end;
end;
//00468F00
procedure MainOutMessage(sMsg: string);
begin
  EnterCriticalSection(g_OutMessageCS);
  try
    g_MainMsgList.Add(sMsg)
  finally
    LeaveCriticalSection(g_OutMessageCS);
  end;
end;

procedure LoadDBSetup;
begin
    g_sSQLString := 'Provider=SQLOLEDB.1;Password='+g_Config.g_sSQLPassword+';Persist Security Info=True;User ID='+g_Config.g_sSQLUserName+';Initial Catalog='+g_Config.g_sSQLDatabase+';Data Source='+g_Config.g_sSQLHost;
end;

{procedure LoadDBSetup;
var
  LoadList        :TStringList;
  sFileName       :string;
  i               :Integer;
  sLineText, sTmp :string;
begin
  sFileName := '.\!DBSetup.txt';
  if FileExists(sFileName) then begin
    LoadList := TStringList.Create;
    LoadList.LoadFromFile(sFileName);
    for i := 0 to LoadList.Count - 1 do begin
      sLineText := Trim(LoadList.Strings[i]);

      if (sLineText <> '') then begin
        if sLineText[1] = ';' then Continue;
        //sTmp holds Connect=
        //sLineText holds SQL
        sLineText := GetValidStr3(sLineText, sTmp, ['=']);

        if (sLineText <> '') then g_sSQLString := sLineText;
      end;
    end;
    LoadList.Free;
  end else
    ShowMessage('[Critical Failure] file not found. .\!DBSetup.txt');
end;}

initialization
begin
  InitializeCriticalSection(g_OutMessageCS);
  g_MainMsgList := TStringList.Create;
end;

finalization
begin
  g_MainMsgList.Free;
  DeleteCriticalSection(g_OutMessageCS);
end;

end.

⌨️ 快捷键说明

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