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溝퐕
|
|
#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("붲�_�B쌈 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;
|
|
}
|
|
|
|
// <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("轟槻돨꽝鑒!\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 溝퐕
|
|
//
|
|
// <RUNNING>
|
|
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 <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();
|
|
}
|