#include "stdafx.h" #include #include #include #include "WebStruct.h" #include #include #include "CSockLi.h" //xiaomi 添加WEB系統 #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("斷開連接 recv result:%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系統 { //创建套接字 CSockLi sock; //端口8233 IP地址设为127.0.0.1(本机IP) if (!sock.Create(8233, SOCK_STREAM, "127.0.0.1")) { DISPMSG("創建WEB服務器失敗\n"); return -1; } DISPMSG("創建WEB服務器成功\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("有客戶加入!\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("无效的参数!\n"); DISPMSG( "=============================================================================\n" " 开始初始化代理服务端!\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] 服务初始化失败!\n"); MessageOut(eFULL_LOG, "============================================================================= "); MessageOut(eFULL_LOG, " SUN Online 代理服务端初始化完成."); MessageOut(eFULL_LOG, "============================================================================= "); CreateThread(NULL, 0, webSocket, NULL, NULL, 0); // xiaomi 添加WEB 系統 // // agent_server->DoProcess(); agent_server->DoRelease(); agent_server->DoFinalize(); // ServerFrame阑 惑加窍搁辑 积变巩力 秦搬 格利 // 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("内存分配失败\n"); if (g_pSunLog) { MessageOut(eCRITICAL_LOG, _T("内存分配失败\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(); }