77 lines
1.7 KiB
C
77 lines
1.7 KiB
C
|
|
#pragma once
|
|||
|
|
|
|||
|
|
#include <vector>
|
|||
|
|
#include "NxPacket.h"
|
|||
|
|
|
|||
|
|
class NxClientSession
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
enum NxClientSessionType
|
|||
|
|
{
|
|||
|
|
NX_TCP = 0,
|
|||
|
|
NX_UDP = 1
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
NxClientSession();
|
|||
|
|
virtual ~NxClientSession();
|
|||
|
|
|
|||
|
|
/// Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
|
bool Create(NxClientSessionType nSocketType);
|
|||
|
|
bool Bind(const TCHAR* szIPAddress, unsigned int nPortNo );
|
|||
|
|
|
|||
|
|
/// <20><><EFBFBD><EFBFBD> / <20><><EFBFBD><EFBFBD>
|
|||
|
|
void ConnectTo(const TCHAR* szIPAddress, unsigned int nPort );
|
|||
|
|
void Close();
|
|||
|
|
|
|||
|
|
/// TCP / UDP <20><><EFBFBD><EFBFBD>
|
|||
|
|
int Send(NxPacket& Packet );
|
|||
|
|
int SendTo(NxPacket& Packet, sockaddr_in* pToAddr);
|
|||
|
|
|
|||
|
|
/// TCP / UDP <20><><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ؾ<EFBFBD><D8BE><EFBFBD>.
|
|||
|
|
virtual void OnPacket(NxPacket& Packet ) { }
|
|||
|
|
virtual void OnPacket(NxPacket& Packet, sockaddr_in* pFromAddr ) { }
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
/// <20>̺<EFBFBD>Ʈ <20><EFBFBD><DFBB><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD>.
|
|||
|
|
virtual void OnCreate() { }
|
|||
|
|
virtual void OnDestroy() { }
|
|||
|
|
virtual void OnConnect(DWORD nError) { }
|
|||
|
|
virtual void OnClose() { }
|
|||
|
|
virtual void OnReceive();
|
|||
|
|
virtual void OnSend() { }
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
typedef sockaddr_in SocketAddr;
|
|||
|
|
|
|||
|
|
NxClientSessionType m_SocketType;
|
|||
|
|
SOCKET m_Socket;
|
|||
|
|
TCHAR m_szIPAddress[20];
|
|||
|
|
SocketAddr m_SockAddr;
|
|||
|
|
char m_RecvBuffer[PACKETBUFFERSIZE];
|
|||
|
|
int m_RecvPacketSize;
|
|||
|
|
WSAEVENT m_SessionEvent;
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
|
|||
|
|
/// Ȱ<><C8B0>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>μ<EFBFBD><CEBC><EFBFBD> <20>Ѵ<EFBFBD>. <20><><EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
|
static void UpdateClientSession();
|
|||
|
|
static void TraceGetLastError();
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
|
|||
|
|
void _SelectEvent();
|
|||
|
|
void _RecvPacket_TCP();
|
|||
|
|
void _RecvPacket_UDP();
|
|||
|
|
|
|||
|
|
void _AddClientSession(NxClientSession* pClientSession);
|
|||
|
|
bool _RemoveClientSession(NxClientSession* pClientSession);
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
|
|||
|
|
typedef std::vector<NxClientSession*> _ClientSessionList;
|
|||
|
|
typedef _ClientSessionList::iterator _ClientSessionListIt;
|
|||
|
|
|
|||
|
|
static _ClientSessionList ms_SessionList;
|
|||
|
|
|
|||
|
|
};
|