#include "stdafx.h" #include #include #include #include "WebStruct.h" #include #include #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" //================================================================================================== //=============================================================================================== // extern VOID CallBackCommand(CHAR *szMessage); VOID ErrorMsg_n_Pause(CHAR *errmsg); static VOID _Init_Routine(); extern "C" { int WinMainCRTStartup(); } //=============================================================================================== // static SolarSimpleConsole *s_pConsole = NULL; //=============================================================================================== // 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; } // <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 // // 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 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(); }