/* 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; }