server-re/decomp/MessageServer_Release_x64/full/functions/0x14009fee0.c

104 lines
3.5 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x14009fee0 FUN_14009fee0
* Pseudocode, not original source. */
/* WARNING: Removing unreachable block (ram,0x0001400a013d) */
void FUN_14009fee0(undefined ***param_1,wchar_t *param_2,undefined *param_3,undefined8 param_4)
{
int *piVar1;
short *psVar2;
uint uVar3;
int *piVar4;
int *piVar5;
undefined ***pppuVar6;
undefined **ppuVar7;
undefined8 uVar8;
wchar_t *pwVar9;
undefined **ppuVar10;
short *psVar11;
double dVar12;
short *local_res8;
undefined **local_70;
undefined8 local_68;
undefined8 local_60;
undefined8 local_58;
undefined8 local_50;
piVar4 = (int *)(*(code *)(*param_1)[0xb])();
FUN_14006b350(piVar4);
if (DAT_1401b42cf != '\0') {
param_2 = L"Proud::CNetServerImpl::HeartBeat_PerClient";
(*(code *)(*param_1)[0x19])(param_1);
}
pppuVar6 = param_1 + 0x23;
dVar12 = (double)(*(code *)(*pppuVar6)[1])();
ppuVar7 = (undefined **)0x0;
if (param_1[0x193] != (undefined **)0x0) {
ppuVar7 = param_1[0x191];
}
while (ppuVar10 = ppuVar7, ppuVar10 != (undefined **)0x0) {
pwVar9 = (wchar_t *)ppuVar10[1];
if (dVar12 - *(double *)(pwVar9 + 0xc0) < (double)param_1[0x46] ||
dVar12 - *(double *)(pwVar9 + 0xc0) == (double)param_1[0x46]) {
FUN_14009ece0((SIZE_T *)param_1,(uint *)pwVar9);
if (((char)pwVar9[0x380] != '\0') &&
(DAT_1401ac0f8 * 10.0 < dVar12 - *(double *)(pwVar9 + 0xcc))) {
param_3 = &DAT_1401b6110;
(*(code *)param_1[0x95][0x1a])(param_1 + 0x95,*(uint *)(pwVar9 + 0x37c));
}
FUN_140088570(param_1,(longlong *)pwVar9,dVar12,param_4);
pppuVar6 = param_1;
FUN_14008eb10((longlong *)param_1,(longlong *)pwVar9,param_3,param_4);
}
else {
if (param_1[0x2fe] != (undefined **)0x0) {
FUN_14006cb70(pppuVar6,param_2,param_3,param_4);
local_res8 = (short *)PTR_DAT_1401ac010;
uVar3 = (**(code **)(*(longlong *)pwVar9 + 0x10))(pwVar9);
FUN_140053d20((longlong *)&local_res8,
L"클라 %d로부터의 TCP 수신이 오랫동안 없어서 소켓을 닫습니다."
,(ulonglong)uVar3,param_4);
psVar2 = local_res8;
psVar11 = local_res8;
if (local_res8 == (short *)0x0) {
psVar11 = (short *)PTR_DAT_1401ac010;
}
uVar8 = 0;
ppuVar7 = param_1[0x2fe];
FUN_1400cb700((longlong)ppuVar7,0,psVar11,param_4);
if (((psVar2 != (short *)0x0) && (psVar2 != (short *)PTR_DAT_1401ac010)) &&
(psVar2 + -4 != (short *)0x0)) {
piVar5 = (int *)FUN_14006cb70(ppuVar7,uVar8,psVar11,param_4);
FUN_14006b350(piVar5);
piVar1 = (int *)(psVar2 + -2);
*piVar1 = *piVar1 + -1;
if (*piVar1 == 0) {
FUN_14006cc60(psVar2 + -4);
}
FUN_14006b3e0((longlong)piVar5);
}
}
local_68 = 0;
local_60 = 0;
local_58 = 0;
local_50 = 0;
local_70 = Proud::ByteArray::vftable;
param_4 = 7;
param_3 = (undefined *)0xb;
FUN_14009dbc0((SIZE_T *)param_1,(uint *)pwVar9,0xb,7,(longlong)&local_70,
L"Proud::CNetServerImpl::HeartBeat_PerClient",0);
pppuVar6 = &local_70;
FUN_140078360(pppuVar6);
}
param_2 = pwVar9;
ppuVar7 = (undefined **)0x0;
if (ppuVar10 != (undefined **)0x0) {
ppuVar7 = (undefined **)ppuVar10[2];
}
}
FUN_14006b3e0((longlong)piVar4);
return;
}