#pragma once #include #include "NxPacket.h" class NxClientSession { public: enum NxClientSessionType { NX_TCP = 0, NX_UDP = 1 }; NxClientSession(); virtual ~NxClientSession(); /// Ŭ¶óÀÌ¾ðÆ®¿ë ¼ÒÄÏ »ý¼º bool Create(NxClientSessionType nSocketType); bool Bind(const TCHAR* szIPAddress, unsigned int nPortNo ); /// Á¢¼Ó / ÇØÁ¦ void ConnectTo(const TCHAR* szIPAddress, unsigned int nPort ); void Close(); /// TCP / UDP Àü¼Û int Send(NxPacket& Packet ); int SendTo(NxPacket& Packet, sockaddr_in* pToAddr); /// TCP / UDP ¼ö½Å - ÀçÁ¤ÀÇ ÇØ¾ßÇÔ. virtual void OnPacket(NxPacket& Packet ) { } virtual void OnPacket(NxPacket& Packet, sockaddr_in* pFromAddr ) { } protected: /// À̺¥Æ® ¹ß»ý½Ã È£ÃâµÊ. 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: /// Ȱ¼ºÈ­µÈ ¼ÒÄÏ ÀÔÃâ·ÂÀ» ÇÁ·Î¼¼½Ì ÇÑ´Ù. ¸ÞÀηçÇÁ¿¡¼­ È£ÃâÇØÁà¾ßÇÑ´Ù. 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 _ClientSessionList; typedef _ClientSessionList::iterator _ClientSessionListIt; static _ClientSessionList ms_SessionList; };