DragonNest/Common/NxServerLib/include/NxServerApp.h
2024-12-19 09:48:26 +08:00

92 lines
No EOL
2.3 KiB
C++

#pragma once
#include "NxAsyncEvent.h"
#include "NxPacket.h"
class NxNetInit;
class NxAcceptor;
class NxCompletionPort;
class NxConnection;
class NxConnectionManager;
class NxSession;
class NxSessionManager;
class NxTimerThread;
class NxServerApp : public NxAsyncEventHandler
{
public:
NxServerApp();
virtual ~NxServerApp();
// 서버 시작
virtual bool Create( int nWorkerTheadCnt, int nSessionPoolCnt, DWORD nTimerValue );
virtual bool BeginAcceptor(const TCHAR* szIPAddress, unsigned short nPort);
virtual void Destroy();
// 세션 프록시 매니저를 생성한다. 재정의 해야됨
virtual bool CreateSessionManager();
virtual NxSession* OpenSession(const TCHAR* szIPAddress, unsigned short nPort);
virtual bool CloseSession(DWORD nUID);
void GetLocalIpPort( DWORD nUID, OUT tstring& szIP, OUT WORD& nPort );
public:
virtual void HandleEvent( NxAsyncEvent* pEvent );
// 클라이언트가 접속 했을때 호출된다.
virtual void OnAccept( DWORD nUID, NxAsyncEvent* pEvent );
// 서버에 접속 되었을때 호출된다. ( 클라이언트 용 세션을 접속시켰을때 )
virtual void OnConnect( DWORD nUID, NxAsyncEvent* pEvent );
// 접속 끊김
virtual void OnClose( DWORD nUID );
// 사용자 정의 이벤트
virtual void OnUserEvent( DWORD nUID, NxAsyncEvent* pEvent );
// 패킷 수신시
virtual void OnPacket( DWORD nUID, NxPacket& Packet );
// 패킷 송신시
virtual void SendPacket( DWORD nUID, NxPacket& Packet );
// 타이머
virtual void OnTimer(DWORD dt) { }
public:
static void AddSendBytes(DWORD nBytes) { m_nTotalSendBytes += nBytes; }
static void AddRecvBytes(DWORD nBytes) { m_nTotalRecvBytes += nBytes; }
static void AddSendCount() { ++m_nTotalSendCnt; }
static void AddRecvCount() { ++m_nTotalRecvCnt; }
static void ClearIOInfo() { m_nTotalSendBytes = m_nTotalRecvBytes = m_nTotalSendCnt = m_nTotalRecvCnt = 0; }
public:
static DWORD m_nTotalSendBytes;
static DWORD m_nTotalRecvBytes;
static DWORD m_nTotalSendCnt;
static DWORD m_nTotalRecvCnt;
private:
NxNetInit* m_pNetInit;
NxAcceptor* m_pAcceptor;
// IO 용 CP
NxCompletionPort* m_pNetIOCompletionPort;
// Msg 처리용 CP
NxCompletionPort* m_pMsgCompletionPort;
// 커넥션 매니저
NxConnectionManager* m_pConnectionManager;
// 타이머 쓰레드
//NxTimerThread* m_pTimerThread;
// 마지막 타임
DWORD m_nLastTime;
protected:
// 세션 매니저
NxSessionManager* m_pSessionManager;
};