CN1602 is the local client. KR is the official tree with unpacked Data, System, and Sound. Packed .wpk files stay off git.
270 lines
7.5 KiB
C++
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();
|
|
}
|