// Network.h: interface for the CNetwork class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_NETWORK_H__5F5E9AA4_BFC5_40A0_8FCB_58D2BF51EEB0__INCLUDED_) #define AFX_NETWORK_H__5F5E9AA4_BFC5_40A0_8FCB_58D2BF51EEB0__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "Network\ClientSocket\ClientSocket.h" #include "ItemInstance.h" #include #include enum NetworkState { NS_NOWAITING = 0, NS_CONNECTGAMESERVER, NS_SERVERMOVE, NS_CHARLOGIN, NS_CHARSELECT, NS_USERLOGIN, NS_UPDATEADDRESS, NS_CREATECHAR, NS_DELETECHAR, NS_TAKEITEM, NS_TRADEITEM, NS_RESPAWN, NS_UPGRADECLASS, NS_USEITEM, NS_SKILLERASE, NS_TAKEGOLD, NS_CASTOBJECT, NS_CONNECTAUTHSERVER, NS_SKILLUNLOCK, NS_ZONEMOVE, NS_RESPAWNSELECT, NS_STALLREGISTERITEM, }; enum NetworkError { NE_NOERROR = 0, NE_VERSION, NE_USERID, NE_USERPW, NE_LOGINSERVER, //Ä¿³ØÆÃ ¿¡·¯ NE_AGENTSERVER, NE_LOGINCHRINFO, NE_SELECTCHR, NE_CHRCREATE, NE_CHRDELETE, NE_CHRMOVE, NE_CHRSELECT, NE_CHRSHAPE, NE_CHRATT, NE_LOGOUT, NE_CHAT, NE_DEAD, NE_RESP, NE_LEVELUP, NE_TRADE, NE_MOTION, NE_TAKEOUT, NE_TAKEIN, NE_ALREADY, //ÀÌ¹Ì Á¢¼ÓµÇ¾îÀÖÀ½, NE_DBCONNECTION, NE_UNIDENTYUSER, NE_USERDATA, NE_LOCATION, NE_DBFAIL }; using namespace std; const unsigned int BUFFERSIZE = 10000; class CNetwork { private: char m_aryBuffer[BUFFERSIZE]; char m_cNetworkPacketCommand; BOOL ParseUserLogin(char *aryBuffer); BOOL ParseCharSelect(char *aryBuffer); BOOL ParseCharLogin(char *aryBuffer); BOOL ParseCharCreate(char *aryBuffer); BOOL ParseCharDelete(char *aryBuffer); BOOL ParseCharUpdateAddress(char *aryBuffer); BOOL ParseCharMove(char *aryBuffer); BOOL ParseCharCellLogin(char *aryBuffer); BOOL ParseCharCellLogout(char *aryBuffer); BOOL ParseCharAddressInfo(char *aryBuffer); BOOL ParseCharChat(char *aryBuffer); BOOL ParseMonMove(char *aryBuffer); BOOL ParseCharAttack(char *aryBuffer); BOOL ParseCharRespawn(char *aryBuffer); BOOL ParseCharAttackInfo(char *aryBuffer); BOOL ParseGameCellInfo(char *aryBuffer); BOOL ParseCharPullDown(char *aryBuffer); BOOL ParseCharPullDownInfo(char *aryBuffer); // ³ª¸¦ Æ÷ÇÔÇØ¼­ °£´Ù. BOOL ParseCharPickUp(char *aryBuffer); BOOL ParseCharPickUpInfo(char *aryBuffer); // ³ª¸¦ Æ÷ÇÔÇØ¼­ °£´Ù. BOOL ParseCharAttacked(char *aryBuffer); BOOL ParseCharTakeItem(char *aryBuffer); BOOL ParseCharSwapItem(char *aryBuffer); BOOL ParseCharTradeItem(char *aryBuffer); BOOL ParseCharShapeInfo(char *aryBuffer); BOOL ParseCharPartyCmd(char *aryBuffer); BOOL ParseCharPartyInfo(char *aryBuffer); BOOL ParseCharUseItem(char *aryBuffer); BOOL ParseCharSkillLock(char *aryBuffer); BOOL ParseCharSkillErase(char *aryBuffer); BOOL ParseCharSkillCreate(char *aryBuffer); BOOL ParseCharRepairItem(char *aryBuffer); BOOL ParseCharInstallSocket(char *aryBuffer); BOOL ParseCharSplitItem(char *aryBuffer); BOOL ParseCharUpgradeItem(char *aryBuffer); BOOL ParseCharAward(char *aryBuffer); BOOL ParseCharLevelUp(char *aryBuffer); BOOL ParseCharLevelUpInfo(char *aryBuffer); BOOL ParseCharIncreasePoint(char *aryBuffer); BOOL ParseCharHPRegen(char *aryBuffer); BOOL ParseCharBindPos(char *aryBuffer); BOOL ParseCharQuickSlotMove(char *aryBuffer); BOOL ParseCharPartyMemInfo(char *aryBuffer); BOOL ParseCharClassUpgrade(char *aryBuffer); BOOL ParseCellBroadCasting(char *aryBuffer); BOOL ParseCharCastObjectInfo(char *aryBuffer); BOOL ParseCharPartyCmdInfo(char *aryBuffer); BOOL ParseCharRequireInfo(char *aryBuffer); BOOL ParseCharWhisper(char *aryBuffer); BOOL ParseCharExchangeCmd(char *aryBuffer); BOOL ParseCharExchangeItem(char *aryBuffer); BOOL ParseCharTakeGold(char *aryBuffer); BOOL ParseCharDuelCmd(char *aryBuffer); BOOL ParseCharFameInfo(char *aryBuffer); BOOL ParseCharPartyFind(char *aryBuffer); BOOL ParseCharSpellInfo(char *aryBuffer); BOOL ParseControlOption(char *aryBuffer); BOOL ParseCharSkillUnLock(char *aryBuffer); BOOL ParseServerZone(char *aryBuffer); BOOL ParseCharMoveZone(char *aryBuffer); BOOL ParseDepositUpdate(char *aryBuffer); BOOL ParseDeposit(char *aryBuffer); BOOL ParseCharStallOpen(char *aryBuffer); BOOL ParseCharStallEnter(char *aryBuffer); BOOL ParseCharStallRegisterItem(char *aryBuffer); BOOL ParseCharStallItemInfo(char *aryBuffer); BOOL ParseCharTeamBattleInfo(char *aryBuffer); BOOL ParseCharEliteBonus(char *aryBuffer); BOOL ParseCharStartQuest(char *aryBuffer); BOOL ParseCharOperateTrigger(char *aryBuffer); BOOL ParseCharDisappearItme(char *aryBuffer); BOOL ParseCharFriendDB(char *aryBuffer); BOOL ParseCharFriendAck(char *aryBuffer); BOOL ParseCharFriendRegistered(char *aryBuffer); BOOL ParseCharQuestInfo(char *aryBuffer); BOOL ParseCharEndQuest(char *aryBuffer); BOOL ParseCharPeaceMode(char *aryBuffer); BOOL ParseCharAuthorizePanel(char *aryBuffer); void ProcessError(void); public: void SetChant(CItemInstance *lpChantSkill); static ClientSocket *m_pSocket; BOOL m_bLoginSuccess; BOOL m_bUpdateAddressPacket; BOOL m_bCompleteDeposit; BOOL m_bCharLoginSuccess; static NetworkState m_nsNetworkStateforCastObject; static NetworkState m_nsNetworkState; static unsigned long m_dwNetworkError; static long m_lShoutCounter; static long m_lFameInfoCounter; static long m_lPartyFindCounter; static long m_lPartyCmdCounter; static long m_lSetSkillCounter; long m_lUDPPacketTotalByte, m_lUDPPAcketPerSecond, m_lUDPPacketOldByte; long m_lTCPPacketTotalByte, m_lTCPPAcketPerSecond, m_lTCPPacketOldByte; list m_lstSendShape; list m_lstRecvShape; CNetwork(); ~CNetwork(); BOOL Create(HWND hWnd); BOOL ConnectToGameServer(char *strServerIP); BOOL ConnectToAuthServer(char *strServerIP); BOOL Login(void); BOOL CharSelect(unsigned long dwChrID); void PacketProcess(LPARAM lParam, BOOL bUDP); void PacketProcess(BOOL bUDP); static void SetState(NetworkState nsState) { m_nsNetworkState = nsState; } static NetworkState GetState(void) { return m_nsNetworkState; } static void SetError(unsigned long dwError) { m_dwNetworkError = dwError; } static unsigned long GetError(void) { return m_dwNetworkError; } static bool IsExistToList(unsigned short List_In, unsigned long CharID_In); static bool CharAddressRequireInfo(unsigned long SenderID_In, unsigned long CharID_In); static BOOL SendDeleteChar(unsigned long dwSlot, unsigned long dwUID); static BOOL SendCreateChar(unsigned long dwSlot, CHAR_CREATE &pCreateChar); static BOOL SendChatMessage(const char *strName, const char *strMessage, unsigned long dwCommand); static BOOL SendMovingPacket(unsigned long dwUpperAni, unsigned long dwLowerAni, float fDir, vector3 &vecMove); static BOOL SendMoveUpdatePacket(float fDir, vector3 &vecPosition); static BOOL SendCharAttack(vector3 &vecPos, float fDir, unsigned short wType, unsigned char cSkillLock, unsigned char cSkillLevel, unsigned char cAtCount, unsigned short wDefenserNum, unsigned long dwDefenser[10]); static BOOL SendCharRespawn(unsigned long dwChrID); static BOOL SendFieldObjectPickUp(unsigned long dwFieldID, Item::ItemPos &pItemIndex); static BOOL SendTakeItem(CItemInstance *lpTakeItem, Item::ItemPos *lpTakeIndex, unsigned char cNum); static BOOL SendSplitItem(CItemInstance *lpTakeItem, Item::ItemPos *lpTakeIndex, unsigned char cNum); static BOOL SendSwapItem(CItemInstance *lpSrcItem, Item::ItemPos *lpSrcIndex, CItemInstance *lpDstItem); static BOOL SendFieldObjectPullDown(unsigned long dwNum, Item::ItemPos &pItemIndex); static BOOL SendTradeItem(unsigned long dwNPCID, unsigned short wTypeID, unsigned long dwNum, Item::ItemPos &pSrcPos, Item::ItemPos &pDstPos); static BOOL SendCharShape(unsigned long dwChrID = 0xFFFFFFFF); static BOOL SendQuickSlotMove(CItemInstance *lpTakeItem, unsigned char cPos, unsigned char cIndex, unsigned char cNum = 1); static BOOL SendCharSwitchHand(void); static BOOL SendMyInfoforParty(void); static BOOL SendFameInfo(unsigned short wCmd); static long SendPartyFind(void); static long SendPartyCmd(unsigned long dwReferenceID, unsigned short wCmd); static void SendChant(CItemInstance *lpChantSkill); static BOOL SendExchangeCmd(unsigned long dwSendID, unsigned short wCmd); static void SendClientLog(unsigned short wCmd, char *strString, char *strString2 = NULL); static BOOL SendStallEnter(unsigned long dwStallChrID); static BOOL SendStallLeave(void); }; #endif // !defined(AFX_NETWORK_H__5F5E9AA4_BFC5_40A0_8FCB_58D2BF51EEB0__INCLUDED_)