dbsmain.pas
来自「FIR引擎最新源码+注册」· PAS 代码 · 共 1,088 行 · 第 1/3 页
PAS
1,088 行
nCheckCode := -1;
if (sAccount <> '') and (sHumName <> '') then begin
if (FrmIDSoc.CheckSessionLoadRcd(sAccount, sIPaddr, nSessionID, boFoundSession)) then begin
nCheckCode := 1;
end else begin
if boFoundSession then begin
MainOutMessage('[非法重复请求] ' + '帐号: ' + sAccount + ' IP: ' + sIPaddr + ' 标识: ' + IntToStr(nSessionID));
end else begin
MainOutMessage('[非法请求] ' + '帐号: ' + sAccount + ' IP: ' + sIPaddr + ' 标识: ' + IntToStr(nSessionID));
end;
//nCheckCode:= 1; //测试用,正常去掉
end;
end;
if nCheckCode = 1 then begin
try
if HumDataDB.OpenEx then begin
nIndex := HumDataDB.Index(sHumName);
if nIndex >= 0 then begin
if HumDataDB.Get(nIndex, HumanRCD) < 0 then nCheckCode := -2;
end else nCheckCode := -3;
end else nCheckCode := -4;
finally
HumDataDB.Close();
end;
end;
if nCheckCode = 1 then begin
m_DefMsg := MakeDefaultMsg(DBR_LOADHUMANRCD, 1, 0, 0, 1);
SendSocket(ServerInfo, EncodeMessage(m_DefMsg) + EncodeString(sHumName) + '/' + EncodeBuffer(@HumanRCD, SizeOf(THumDataInfo)));
end else begin
m_DefMsg := MakeDefaultMsg(DBR_LOADHUMANRCD, nCheckCode, 0, 0, 0);
SendSocket(ServerInfo, EncodeMessage(m_DefMsg));
end;
end;
procedure TFrmDBSrv.SaveHumanRcd(nRecog: Integer; sMsg: string; ServerInfo: pTServerInfo);
var
sChrName: string;
sUserId: string;
sHumanRCD: string;
i: Integer;
nIndex: Integer;
bo21: Boolean;
DefMsg: TDefaultMessage;
HumanRCD: THumDataInfo;
HumSession: pTHumSession;
begin
sHumanRCD := GetValidStr3(sMsg, sUserId, ['/']);
sHumanRCD := GetValidStr3(sHumanRCD, sChrName, ['/']);
sUserId := DecodeString(sUserId);
sChrName := DecodeString(sChrName);
bo21 := False;
FillChar(HumanRCD.Data, SizeOf(THumData), #0);
if Length(sHumanRCD) = GetCodeMsgSize(SizeOf(THumDataInfo) * 4 / 3) then
DecodeBuffer(sHumanRCD, @HumanRCD, SizeOf(THumDataInfo))
else bo21 := True;
if not bo21 then begin
bo21 := True;
try
if HumDataDB.Open then begin
nIndex := HumDataDB.Index(sChrName);
if nIndex < 0 then begin
HumanRCD.Header.boIsHero := False;
HumanRCD.Header.sName := sChrName;
HumDataDB.Add(HumanRCD);
nIndex := HumDataDB.Index(sChrName);
end;
if nIndex >= 0 then begin
HumanRCD.Header.boIsHero := False;
HumanRCD.Header.sName := sChrName;
HumDataDB.Update(nIndex, HumanRCD);
bo21 := False;
end;
end;
finally
HumDataDB.Close;
end;
FrmIDSoc.SetSessionSaveRcd(sUserId);
end;
if not bo21 then begin
m_DefMsg := MakeDefaultMsg(DBR_SAVEHUMANRCD, 1, 0, 0, 0);
SendSocket(ServerInfo, EncodeMessage(m_DefMsg));
end else begin
m_DefMsg := MakeDefaultMsg(DBR_LOADHUMANRCD, 0, 0, 0, 0);
SendSocket(ServerInfo, EncodeMessage(m_DefMsg));
end;
end;
procedure TFrmDBSrv.SaveHumanRcdEx(sMsg: string; nRecog: Integer; ServerInfo: pTServerInfo);
var
sChrName: string;
sUserId: string;
sHumanRCD: string;
i: Integer;
bo21: Boolean;
DefMsg: TDefaultMessage;
HumanRCD: THumDataInfo;
begin
sHumanRCD := GetValidStr3(sMsg, sUserId, ['/']);
sHumanRCD := GetValidStr3(sHumanRCD, sChrName, ['/']);
sUserId := DecodeString(sUserId);
sChrName := DecodeString(sChrName);
SaveHumanRcd(nRecog, sMsg, ServerInfo);
end;
procedure TFrmDBSrv.Timer1Timer(Sender: TObject);
var
i: Integer;
begin
LbTransCount.Caption := IntToStr(n348);
n348 := 0;
if nServerCount > 0 then
Label1.Caption := '已连接...'
else Label1.Caption := '未连接 !!';
Label2.Caption := '连接数: ' + IntToStr(nServerCount);
LbUserCount.Caption := IntToStr(FrmUserSoc.GetUserCount);
if boOpenDBBusy then begin
if n4ADB18 > 0 then begin
if not bo4ADB1C then begin
Label4.Caption := '[1/4] ' + IntToStr(Round((n4ADB10 / n4ADB18) * 1.0E2)) + '% ' +
IntToStr(n4ADB14) + '/' +
IntToStr(n4ADB18);
end;
end;
if n4ADB04 > 0 then begin
if not boHumDBReady then begin
Label4.Caption := '[3/4] ' + IntToStr(Round((n4ADAFC / n4ADB04) * 1.0E2)) + '% ' +
IntToStr(n4ADB00) + '/' +
IntToStr(n4ADB04);
end;
end;
if n4ADAF0 > 0 then begin
if not boDataDBReady then begin
Label4.Caption := '[4/4] ' + IntToStr(Round((n4ADAE4 / n4ADAF0) * 1.0E2)) + '% ' +
IntToStr(n4ADAE8) + '/' +
IntToStr(n4ADAEC) + '/' +
IntToStr(n4ADAF0);
end;
end;
end;
LbAutoClean.Caption := IntToStr(g_nClearIndex) + '/(' + IntToStr(g_nClearCount) + '/' + IntToStr(g_nClearItemIndexCount) + ')/' + IntToStr(g_nClearRecordCount);
Label8.Caption := 'H-QyChr=' + IntToStr(g_nQueryChrCount);
Label9.Caption := 'H-NwChr=' + IntToStr(nHackerNewChrCount);
Label10.Caption := 'H-DlChr=' + IntToStr(nHackerDelChrCount);
Label11.Caption := 'Dubb-Sl=' + IntToStr(nHackerSelChrCount);
EnterCriticalSection(g_OutMessageCS);
try
ShowModule();
for i := 0 to g_MainMsgList.Count - 1 do begin
MemoLog.Lines.Add('[' + DateTimeToStr(Now) + '] ' + g_MainMsgList.Strings[i]);
end;
g_MainMsgList.Clear;
finally
LeaveCriticalSection(g_OutMessageCS);
end;
if MemoLog.Lines.Count > 200 then MemoLog.Lines.Clear;
end;
procedure TFrmDBSrv.ShowModule();
var
nIndex: Integer;
dwTempTick, dwAliveTick: LongWord;
function GetModule(nPort: Integer): Boolean;
var
i: Integer;
Items: TListItem;
begin
Result := False;
ListView.Items.BeginUpdate;
try
for i := 0 to FrmDBSrv.ListView.Items.Count - 1 do begin
Items := ListView.Items.Item[i];
if Items.Data <> nil then begin
if Integer(Items.Data) = nPort then begin
Result := True;
Break;
end;
end;
end;
finally
ListView.Items.EndUpdate;
end;
end;
procedure DelModule(nPort: Integer);
var
i: Integer;
DelItems: TListItem;
begin
ListView.Items.BeginUpdate;
try
for i := ListView.Items.Count - 1 downto 0 do begin
DelItems := ListView.Items.Item[i];
if DelItems.Data <> nil then begin
if Integer(DelItems.Data) = nPort then begin
ListView.Items.Delete(i);
Break;
end;
end;
end;
finally
ListView.Items.EndUpdate;
end;
end;
procedure UpDateModule(nPort: Integer; sName, sAddr, sTimeTick: string);
var
UpDateItems: TListItem;
i: Integer;
begin
ListView.Items.BeginUpdate;
try
if sTimeTick <> '' then begin
for i := 0 to ListView.Items.Count - 1 do begin
UpDateItems := ListView.Items.Item[i];
if UpDateItems.Data <> nil then begin
if Integer(UpDateItems.Data) = nPort then begin
// UpDateItems.Caption := sName;
//UpDateItems.SubItems[0] := sAddr;
UpDateItems.SubItems[1] := sTimeTick;
Break;
end;
end;
end;
end;
finally
ListView.Items.EndUpdate;
end;
end;
procedure AddModule(nPort: Integer; sName, sAddr, sTimeTick: string);
var
AddItems: TListItem;
begin
ListView.Items.BeginUpdate;
try
if (nPort > 0) and (sName <> '') and (sAddr <> '') then begin
AddItems := ListView.Items.Add;
AddItems.Data := TObject(nPort);
AddItems.Caption := sName;
AddItems.SubItems.Add(sAddr);
AddItems.SubItems.Add(sTimeTick);
end;
finally
ListView.Items.EndUpdate;
end;
end;
function GetSelectTickStr(): string;
var
s01, s02: string;
begin
s01 := IntToStr(dwKeepAliveTick);
s01 := Copy(s01, Length(s01) - 4, 4);
s02 := IntToStr(GetTickCount + dwKeepAliveTick);
s02 := Copy(s02, Length(s02) - 4, 4);
if (Length(s01) > 1) and (s01[1] = '0') then s01 := Copy(s01, 2, Length(s01) - 1);
if (Length(s01) > 1) and (s01[1] = '0') then s01 := Copy(s01, 2, Length(s01) - 1);
if (Length(s01) > 1) and (s01[1] = '0') then s01 := Copy(s01, 2, Length(s01) - 1);
if (Length(s01) > 1) and (s01[1] = '0') then s01 := Copy(s01, 2, Length(s01) - 1);
if (Length(s02) > 1) and (s02[1] = '0') then s02 := Copy(s02, 2, Length(s02) - 1);
if (Length(s02) > 1) and (s02[1] = '0') then s02 := Copy(s02, 2, Length(s02) - 1);
if (Length(s02) > 1) and (s02[1] = '0') then s02 := Copy(s02, 2, Length(s02) - 1);
if (Length(s02) > 1) and (s02[1] = '0') then s02 := Copy(s02, 2, Length(s02) - 1);
Result := Format('%s%s%s', [s01, '/', s02]);
end;
function GetIDServerTickStr(): string;
var
s01, s02: string;
begin
s01 := IntToStr(dwKeepIDAliveTick);
s01 := Copy(s01, Length(s01) - 4, 4);
s02 := IntToStr(GetTickCount + dwKeepIDAliveTick);
s02 := Copy(s02, Length(s02) - 4, 4);
if (Length(s01) > 1) and (s01[1] = '0') then s01 := Copy(s01, 2, Length(s01) - 1);
if (Length(s01) > 1) and (s01[1] = '0') then s01 := Copy(s01, 2, Length(s01) - 1);
if (Length(s01) > 1) and (s01[1] = '0') then s01 := Copy(s01, 2, Length(s01) - 1);
if (Length(s01) > 1) and (s01[1] = '0') then s01 := Copy(s01, 2, Length(s01) - 1);
if (Length(s02) > 1) and (s02[1] = '0') then s02 := Copy(s02, 2, Length(s02) - 1);
if (Length(s02) > 1) and (s02[1] = '0') then s02 := Copy(s02, 2, Length(s02) - 1);
if (Length(s02) > 1) and (s02[1] = '0') then s02 := Copy(s02, 2, Length(s02) - 1);
if (Length(s02) > 1) and (s02[1] = '0') then s02 := Copy(s02, 2, Length(s02) - 1);
Result := Format('%s%s%s', [s01, '/', s02]);
end;
function GetM2ServerTickStr(): string;
var
s01, s02: string;
begin
s01 := IntToStr(dwKeepServerAliveTick);
s01 := Copy(s01, Length(s01) - 4, 4);
s02 := IntToStr(GetTickCount + dwKeepServerAliveTick);
s02 := Copy(s02, Length(s02) - 4, 4);
if (Length(s01) > 1) and (s01[1] = '0') then s01 := Copy(s01, 2, Length(s01) - 1);
if (Length(s01) > 1) and (s01[1] = '0') then s01 := Copy(s01, 2, Length(s01) - 1);
if (Length(s01) > 1) and (s01[1] = '0') then s01 := Copy(s01, 2, Length(s01) - 1);
if (Length(s01) > 1) and (s01[1] = '0') then s01 := Copy(s01, 2, Length(s01) - 1);
if (Length(s02) > 1) and (s02[1] = '0') then s02 := Copy(s02, 2, Length(s02) - 1);
if (Length(s02) > 1) and (s02[1] = '0') then s02 := Copy(s02, 2, Length(s02) - 1);
if (Length(s02) > 1) and (s02[1] = '0') then s02 := Copy(s02, 2, Length(s02) - 1);
if (Length(s02) > 1) and (s02[1] = '0') then s02 := Copy(s02, 2, Length(s02) - 1);
Result := Format('%s%s%s', [s01, '/', s02]);
end;
begin
if UserSocketClientConnected then begin
if GetModule(g_nGatePort) then
UpDateModule(g_nGatePort, '角色网关', User_sRemoteAddress + ':' + IntToStr(User_nRemotePort) + ' → ' + User_sRemoteAddress + ':' + IntToStr(g_nGatePort), GetSelectTickStr())
else AddModule(g_nGatePort, '角色网关', User_sRemoteAddress + ':' + IntToStr(User_nRemotePort) + ' → ' + User_sRemoteAddress + ':' + IntToStr(g_nGatePort), GetSelectTickStr());
end else begin
if GetModule(g_nGatePort) then DelModule(g_nGatePort);
end;
if IDSocketConnected then begin
if GetModule(nIDServerPort) then
UpDateModule(nIDServerPort, sServerName, ID_sRemoteAddress + ':' + IntToStr(ID_nRemotePort) + ' → ' + ID_sRemoteAddress + ':' + IntToStr(nIDServerPort), GetIDServerTickStr())
else AddModule(nIDServerPort, sServerName, ID_sRemoteAddress + ':' + IntToStr(ID_nRemotePort) + ' → ' + ID_sRemoteAddress + ':' + IntToStr(nIDServerPort), GetIDServerTickStr());
end else begin
if GetModule(nIDServerPort) then DelModule(nIDServerPort);
end;
if ServerSocketClientConnected then begin
if GetModule(nServerPort) then
UpDateModule(nServerPort, '游戏中心', Server_sRemoteAddress + ':' + IntToStr(Server_nRemotePort) + ' → ' + Server_sRemoteAddress + ':' + IntToStr(nServerPort), GetM2ServerTickStr())
else AddModule(nServerPort, '游戏中心', Server_sRemoteAddress + ':' + IntToStr(Server_nRemotePort) + ' → ' + Server_sRemoteAddress + ':' + IntToStr(nServerPort), GetM2ServerTickStr());
end else begin
if GetModule(nServerPort) then DelModule(nServerPort);
end;
{if DataManageSocketClientConnected then begin
if GetModule(nDataManagePort) then
UpDateModule(nDataManagePort, '数据管理', DataManage_sRemoteAddress + ':' + IntToStr(DataManage_nRemotePort) + ' → ' + DataManage_sRemoteAddress + ':' + IntToStr(nServerPort), '')
else AddModule(nDataManagePort, '数据管理', DataManage_sRemoteAddress + ':' + IntToStr(DataManage_nRemotePort) + ' → ' + DataManage_sRemoteAddress + ':' + IntToStr(nServerPort), '');
end else begin
if GetModule(nDataManagePort) then DelModule(nDataManagePort);
end;}
end;
procedure TFrmDBSrv.ResServerArray;
var
nSockIndex: Integer;
begin
for nSockIndex := Low(ServerArray) to High(ServerArray) do begin
ServerArray[nSockIndex].nSckHandle := 0;
ServerArray[nSockIndex].sStr := '';
ServerArray[nSockIndex].s34C := '';
ServerArray[nSockIndex].bo08 := False;
ServerArray[nSockIndex].Socket := nil;
end;
end;
procedure TFrmDBSrv.FormCreate(Sender: TObject);
var
Conf: TIniFile;
nX, nY: Integer;
begin
g_dwGameCenterHandle := Str_ToInt(ParamStr(1), 0);
nX := Str_ToInt(ParamStr(2), -1);
nY := Str_ToInt(ParamStr(3), -1);
if (nX >= 0) or (nY >= 0) then begin
Left := nX;
Top := nY;
end;
m_boRemoteClose := False;
SendGameCenterMsg(SG_FORMHANDLE, IntToStr(Self.Handle));
MainOutMessage('正在启动数据库服务器...');
boOpenDBBusy := True;
Label4.Caption := '';
LbAutoClean.Caption := '-/-';
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?