Files
git 9cb257e7ae Add GameClients drops and keep current 1602 source work.
CN1602 is the local client. KR is the official tree with unpacked Data, System, and Sound. Packed .wpk files stay off git.
2026-08-30 23:24:31 +03:00

270 lines
7.5 KiB
C++

#include "stdafx.h"
#include <Stackwalker.h>
#include <SolarSimpleConsole.h>
#include <SolarDump.h>
#include "WebStruct.h"
#include <AgentServer.h>
#include <UserSessions/UserManager.h>
#include "CSockLi.h" //xiaomi ????WEB??y
#include "PacketStruct_AG.h"
//==================================================================================================
// @desc ??? ???? ?????? ??? ????
#define MEMORY_LEAK_REPORT_FILE "memory_leak_Agent.txt"
// @desc ?????? ??? ???? ??? ?????
#define MEMORY_LEAK_REPORT_FILE_FOR_SHARED "./memory_leak_Agent_shared.txt"
#include "./SharedMemoryLeakReporter.hxx"
//==================================================================================================
//===============================================================================================
// <FUNCTION><PROTOTYPEs>
extern VOID CallBackCommand(CHAR *szMessage);
VOID ErrorMsg_n_Pause(CHAR *errmsg);
static VOID _Init_Routine();
extern "C"
{
int WinMainCRTStartup();
}
//===============================================================================================
// <MODULE><VARIABLEs>
static SolarSimpleConsole *s_pConsole = NULL;
//===============================================================================================
// <ENTRY POINT>
int SunEntryPoint()
{
// SharedMemoryPool::CreateInstance();
#ifdef __WAVERIX_TEST_LOGIC_TASK_MACRO__
WaverixTestEntry();
#endif
return WinMainCRTStartup();
}
#ifdef _NA_007743_20141027_USE_MINIDUMP_WITH_FULLMEMORY
static SolarDump solarDUMP(".", MiniDumpWithFullMemory);
#else // _NA_007743_20141027_USE_MINIDUMP_WITH_FULLMEMORY
static SolarDump solarDUMP(".");
#endif // _NA_007743_20141027_USE_MINIDUMP_WITH_FULLMEMORY
void ClientPro(void *p)
{
const char *p1 = "Welcome to connect";
CSockLi *pSock = (CSockLi *)p;
CSockLi socka = *pSock;
socka.Send(p1, strlen(p1));
MSG_CG_ITEM_WEB_DELETE_ACK msg;
//???????????
char sIp[20];
UINT nPort;
socka.GetPeerName(sIp, nPort);
char str[2048];
ZeroMemory(str, 2048);
PacketHeader header;
PacketDeleteItem deleteChar;
AgentServer *agentServer = AgentServer::GetInstance();
/*SlotItem deleteItem;
deleteChar.charGuid = 5601;
deleteChar.iPacketSize = 10;
deleteChar.sCategory = 1;
deleteItem.Dura = 1;
deleteItem.ItemCode = 1502;
deleteItem.SlotIdx = 50;
deleteChar.item[0] = deleteItem;
DISPMSG(" charGuid: %d PacketAddr:%x size:%d\n",deleteChar.charGuid,&deleteChar,sizeof(PacketDeleteItem));*/
while (true)
{
int n = socka.Receive(str, sizeof(str));
if(n == 0){
DISPMSG("WEB client disconnected recv=%d\n",n);
break;
}
memcpy(&header, str, sizeof(header));
switch (header.sCategory)
{
case WEB_DELETE_EQU:
ZeroMemory(&deleteChar, sizeof(deleteChar));
memcpy(&deleteChar, str, sizeof(deleteChar));
DISPMSG(" charGuid: %d ItemCode:%d size:%d\n", deleteChar.charGuid, deleteChar.item[0].ItemCode, sizeof(deleteChar));
msg.m_dwKey = deleteChar.charGuid;
for (int i = 0; i < deleteChar.itemSize; i++)
{
msg.m_ItemCode = deleteChar.item[i].ItemCode;
msg.m_PortalPos = deleteChar.item[i].SlotIdx;
msg.m_Dura = deleteChar.item[i].Dura;
agentServer->SendToServerByIndex(FIELD_SERVER, &msg, sizeof(msg));
}
break;
default:
DISPMSG("Invaild Packet %d\n", header.sCategory);
break;
}
}
}
DWORD WINAPI webSocket(LPVOID) // xiaomi ????web??y
{
//?????????
CSockLi sock;
//???8233 IP??????127.0.0.1(????IP)
if (!sock.Create(8233, SOCK_STREAM, "127.0.0.1"))
{
DISPMSG("WEB listen failed\n");
return -1;
}
DISPMSG("WEB listen OK\n");
//??????????
char sSevIp[20];
UINT nSevPort;
sock.GetSockName(sSevIp, nSevPort);
//????
sock.Listen(5);
//???????????
char sIp[20]; //?????IP???
UINT nPort; //???????
CSockLi socka; //?????????????
while (true)
{
sock.Accept(socka, sIp, &nPort);
DISPMSG("WEB client connected\n");
//???????????????????????????
_beginthread(ClientPro, 0, &socka);
}
return 0;
}
// <ENTRY POINT><2nd>
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
__UNUSED((hInstance, hPrevInstance, lpCmdLine, nCmdShow));
// CoInitializeEx( NULL, COINIT_MULTITHREADED );
// CoInitialize( NULL );
StartMemoryLeakCheck();
BreakPointOnMemoryLeak(63);
#ifdef _DEBUG
// InitAllocCheck();//Memory Leak Check Start
#endif
_Init_Routine();
// ???? ?¦Ì? ???
if (!ParseArguments((LPTSTR)lpCmdLine))
ErrorMsg_n_Pause("Invalid command line.\n");
DISPMSG(
"=============================================================================\n"
" Starting Agent Server initialization.\n"
"=============================================================================\n");
WAVERIX_WRAPPER((WAVERIX_LC_CALL0("waverix_log_fasttest")));
// ???? ????
AgentServer *agent_server = AgentServer::CreateInstance();
if (!agent_server->DoInit(
AGENT_SERVER_INFO_FILE_NAME,
AgentServer::CreateServerSideAcceptedObject,
AgentServer::DestroyServerSideAcceptedObject,
AgentServer::DestroyServerSideConnectedObject,
AgentServer::CreateClientSideAcceptedObject,
AgentServer::DestroyClientSideAcceptedObject,
AgentServer::DestroyClientSideConnectedObject
/*NULL,
NULL,
NULL*/
))
ErrorMsg_n_Pause("[WinMain] Agent Server init failed!\n");
MessageOut(eFULL_LOG, "============================================================================= ");
MessageOut(eFULL_LOG, " SUN Online Agent Server Initialization Complete.");
MessageOut(eFULL_LOG, "============================================================================= ");
CreateThread(NULL, 0, webSocket, NULL, NULL, 0); // xiaomi ????WEB ??y
//
// <RUNNING>
agent_server->DoProcess();
agent_server->DoRelease();
agent_server->DoFinalize();
// ServerFrame?? ?????ü ???i?? ??? ????
// Release?????? ???¦Ï? Instance ?? ??????? ????? ???? ???? ???????? ???.
// s_pAgentServer->Finalize();
AgentServer::DestroyInstance();
// ???? ????
DISPMSG("[WinMain] Server is Terminated...\n");
// ???? ????
s_pConsole->Release();
SAFE_DELETE(s_pConsole);
#ifdef _DEBUG
// DeInitAllocCheck();//Memory Leak Check End
#endif
return 0;
}
static VOID ErrorHandler_new()
{
printf("Can't Alloc Memory\n");
if (g_pSunLog)
{
MessageOut(eCRITICAL_LOG, _T("Can't Alloc Memory\n"));
g_pSunLog->Flush(CSunLog::cOUTPUT_BOTH);
}
__debugbreak();
}
#ifdef __NA000000_080317_ABNORMAL_EXIT_REDIRECT__
#include <signal.h>
VOID signal_redirect(INT signo)
{
__debugbreak();
}
#endif
static VOID _Init_Routine()
{
#ifdef __NA000000_080317_ABNORMAL_EXIT_REDIRECT__
signal(SIGABRT, signal_redirect);
_set_error_mode(_OUT_TO_STDERR);
#endif
std::set_new_handler(ErrorHandler_new);
// ???? ????
CONSOLE_DESC cdesc;
ZeroMemory(&cdesc, sizeof(cdesc));
cdesc.bUsingConsoleInput = TRUE;
cdesc.bUsingRedirect = TRUE;
s_pConsole = new SolarSimpleConsole;
s_pConsole->Init(&cdesc);
}
VOID ErrorMsg_n_Pause(CHAR *errmsg)
{
DISPMSG(errmsg);
system("pause");
__debugbreak();
}