/** * @file NFPacket.h * @brief ÆÐŶ Ŭ·¡½º * @remarks * @author °­µ¿¸í(edith2580@gmail.com) * @date 2009-04-02 */ #pragma once #ifdef _WIN32 #pragma pack( push ,1 ) #else #pragma pack(1) #endif namespace NaveNet { #define DEF_BUFSIZE 1024 /// Mem Pool and Socket Buffer size #define DEF_PACKETSIZE 1016 /// Packet Size #define DEF_MAXPACKETSIZE 1024 /// Max Packet Size ( Header + Packet ) #define CONNECT_CHECK_DATA "NAV" /// CheckSum ÆÐŶ (óÀ½À¸·Î Server¿¡ Connect ÇÑÈÄ Àü´ÞµÈ´Ù) #define CONNECT_CHECK_SIZE 4 /// Ãʱâ Á¢¼Ó ¿À´Â ÆÐŶ »çÀÌÁî ** WARINING ** /// ÆÐŶ Çì´õ ±¸Á¶Ã¼ typedef struct PACKETHEADER { USHORT Size; /// ½ÇÁ¦ ÆÐŶ Å©±â USHORT Command; /// ÆÐŶÀÇ Á¾·ù DWORD CheckSum; /// üũ¼¶ }*LPPACKETHEADER; #define HEADERSIZE 8 /// ÆÐŶ Çì´õÀÇ »çÀÌÁî /** * @class NFPacket * @brief ÇѰ³ÀÇ ÆÐŶÀ» °ü¸® Çϱâ À§ÇÑ Å¬·¡½º °´Ã¼ * @remarks ÆÐŶÀÇ ±¸Á¶ \r\n \r\n Header( Size, Command) + CheckSum + Data \r\n ------------------------------------------------------------0-------------------\r\n | 2byte | 2byte | CheckSum(4Byte) | Header.Size-Header ¸¸Å­ÀÇ ½ÇÁ¦ Packet ¿ë·® |\r\n --------------------------------------------------------------00----------------\r\n \r\n ¿¹) \r\n #define USER_LOGIN 1 \r\n \r\n typedef struct stLogin \r\n { \r\n CHAR UserID[16]; \r\n CHAR UserPass[12]; \r\n }LOGIN, *LPLOGIN; \r\n \r\n // Header Á¤º¸ \r\n Packet.m_Header.Size = sizeof(LOGIN); \r\n Packet.m_Header.Command = USER_LOGIN; \r\n \r\n // »ç¿ë¹ý \r\n static LPLOGIN login = (LPLOGIN)Packet.m_Packet; \r\n login->UserID; \r\n login->UserPass; \r\n * * @par * @author Edith * @date 2009-04-05 */ class NFPacket { public: /// NFPacket »ý¼ºÀÚ NFPacket(); /// NFPacket ¼Ò¸êÀÚ ~NFPacket(); /// ÆÐŶ ÃʱâÈ­ VOID Init(); /** * @brief Çì´õÀÇ Command ¾ò±â * @return Command Á¤º¸ */ inline USHORT GetCommand() const { return m_Header.Command; } /** * @brief Çì´õ¿¡ Command¸¦ ÁöÁ¤ÇÑ´Ù. * @param shCommand Command °ª */ inline VOID SetCommand(USHORT shCommand) { m_Header.Command = shCommand; } /** * @brief ÆÐŶ »çÀÌÁî ±¸Çϱâ * @return ÆÐŶ »çÀÌÁî */ inline int GetSize() { return m_Header.Size-HEADERSIZE; } /** * @brief ÆÐŶÀÇ »çÀÌÁ ÁöÁ¤ÇÑ´Ù. * @param shDataSize */ inline VOID SetSize(USHORT shDataSize) { // Size = Header + DataSize; m_Header.Size = HEADERSIZE + shDataSize; } /// ÆÐŶÀ» ¾ÏȣȭÇÑ´Ù. int EncryptPacket(); /// ÆÐŶÀ» µðÄÚµùÇÑ´Ù. VOID DecryptPacket(); /// CheckSum º¯¼ö¿Í »õ·Î »ý¼ºÇÑ Ã¼Å©¼¶ÀÌ µ¿ÀÏÇÑÁö °Ë»çÇÑ´Ù. BOOL IsAliveChecksum(); public: /// ÆÐŶÀÇ Çì´õ Á¤º¸ PACKETHEADER m_Header; /// ½ÇÁ¦ ÆÐŶÀÇ Á¤º¸ CHAR m_Packet[DEF_PACKETSIZE]; }; } #pragma pack()