1 ///////////////////////////////////////// 2 // 3 // OpenLieroX 4 // 5 // code under LGPL, based on JasonBs work, 6 // enhanced by Dark Charlie and Albert Zeyer 7 // 8 // 9 ///////////////////////////////////////// 10 11 12 13 #ifndef __CCLIENT_NET_ENGINE_H__ 14 #define __CCLIENT_NET_ENGINE_H__ 15 16 17 #include <string> 18 #include "Consts.h" 19 20 21 class CClient; 22 class CBytestream; 23 24 class CClientNetEngine { 25 26 protected: 27 28 CClient * client; 29 30 public: 31 // Constructor CClientNetEngine(CClient * _client)32 CClientNetEngine(CClient * _client): client(_client) { } 33 ~CClientNetEngine()34 virtual ~CClientNetEngine() { } 35 36 // Parsing 37 void ParseConnectionlessPacket(CBytestream *bs); 38 bool ParsePacket(CBytestream *bs); 39 40 // Sending 41 virtual void SendGameReady(); 42 virtual void SendDeath(int victim, int killer); 43 virtual void SendText(const std::string& sText, std::string sWormName); 44 virtual void SendWormDetails(); 45 virtual void SendGrabBonus(int id, int wormid); 46 virtual void SendUpdateLobby(bool ready = true); 47 virtual void SendDisconnect(); 48 virtual void SendFileData(); SendChatCommandCompletionRequest(const std::string & startStr)49 virtual void SendChatCommandCompletionRequest(const std::string& startStr) { return; } 50 virtual void SendAFK(int wormid, AFK_TYPE afkType, const std::string & message = "") { return; } 51 virtual void SendReportDamage(bool flush = false) { return; } QueueReportDamage(int victim,float damage,int offender)52 virtual void QueueReportDamage(int victim, float damage, int offender) { return; } 53 #ifdef FUZZY_ERROR_TESTING 54 void SendRandomPacket(); 55 #endif 56 57 private: 58 void SendTextInternal(const std::string& sText, const std::string& sWormName); 59 60 protected: 61 62 // Internal details that may be used by child class 63 // I expect child class will redirect most in-lobby messages to parent class 64 void ParseChallenge(CBytestream *bs); 65 void ParseConnected(CBytestream *bs); 66 void ParsePong(); 67 void ParseTimeIs(CBytestream *bs); 68 void ParseTraverse(CBytestream *bs); 69 void ParseConnectHere(CBytestream *bs); 70 71 virtual bool ParsePrepareGame(CBytestream *bs); 72 virtual void ParseScoreUpdate(CBytestream *bs); 73 virtual void ParseUpdateLobbyGame(CBytestream *bs); ParseChatCommandCompletionSolution(CBytestream * bs)74 virtual void ParseChatCommandCompletionSolution(CBytestream* bs) { return; } ParseChatCommandCompletionList(CBytestream * bs)75 virtual void ParseChatCommandCompletionList(CBytestream* bs) { return; } ParseAFK(CBytestream * bs)76 virtual void ParseAFK(CBytestream* bs) { return; } ParseReportDamage(CBytestream * bs)77 virtual void ParseReportDamage(CBytestream *bs) { return; } ParseHideWorm(CBytestream * bs)78 virtual void ParseHideWorm(CBytestream *bs) { return; } 79 virtual void ParseGotoLobby(CBytestream *bs); 80 virtual void ParseStartGame(CBytestream *bs); 81 virtual void ParseSpawnWorm(CBytestream *bs); 82 virtual void ParseWormDown(CBytestream *bs); 83 virtual void ParseUpdateWorms(CBytestream *bs); 84 virtual int ParseWormInfo(CBytestream *bs); 85 86 void ParseUpdateLobby(CBytestream *bs); 87 void ParseWormWeaponInfo(CBytestream *bs); 88 void ParseText(CBytestream *bs); 89 void ParseGameOver(CBytestream *bs); 90 void ParseSpawnBonus(CBytestream *bs); 91 void ParseTagUpdate(CBytestream *bs); 92 void ParseCLReady(CBytestream *bs); 93 void ParseWormsOut(CBytestream *bs); 94 void ParseServerLeaving(CBytestream *bs); 95 void ParseSingleShot(CBytestream *bs); 96 void ParseMultiShot(CBytestream *bs); 97 void ParseUpdateStats(CBytestream *bs); 98 void ParseDestroyBonus(CBytestream *bs); 99 void ParseDropped(CBytestream *bs); 100 void ParseSendFile(CBytestream *bs); 101 virtual void ParseFlagInfo(CBytestream* bs); 102 virtual void ParseTeamScoreUpdate(CBytestream* bs); 103 virtual void ParseWormProps(CBytestream* bs); 104 virtual void ParseSelectWeapons(CBytestream* bs); 105 106 void ParseUpdateLobby_Internal(CBytestream *bs, std::vector<byte> * updatedWorms = NULL); // Second parameter is used only in CClientNetEngineBeta9::ParseUpdateLobby() 107 108 }; 109 110 // TODO: maybe add CClientNetEngineBeta5 for map/mod downloading - SendFileData() and ParseSendFile() funcs 111 class CClientNetEngineBeta7: public CClientNetEngine { 112 public: CClientNetEngineBeta7(CClient * _client)113 CClientNetEngineBeta7( CClient * _client ): CClientNetEngine( _client ) { } 114 115 virtual void SendChatCommandCompletionRequest(const std::string& startStr); 116 virtual void SendAFK(int wormid, AFK_TYPE afkType, const std::string & message = ""); 117 118 virtual bool ParsePrepareGame(CBytestream *bs); 119 virtual void ParseUpdateLobbyGame(CBytestream *bs); 120 virtual void ParseChatCommandCompletionSolution(CBytestream* bs); 121 virtual void ParseChatCommandCompletionList(CBytestream* bs); 122 virtual void ParseAFK(CBytestream* bs); 123 }; 124 125 class CClientNetEngineBeta9: public CClientNetEngineBeta7 { 126 public: CClientNetEngineBeta9(CClient * _client)127 CClientNetEngineBeta9( CClient * _client ): CClientNetEngineBeta7( _client ) 128 { 129 fLastDamageReportSent = AbsTime(); 130 } 131 132 virtual bool ParsePrepareGame(CBytestream *bs); 133 virtual void ParseUpdateLobbyGame(CBytestream *bs); 134 virtual void ParseReportDamage(CBytestream *bs); 135 virtual void ParseScoreUpdate(CBytestream *bs); 136 virtual void ParseHideWorm(CBytestream *bs); 137 virtual int ParseWormInfo(CBytestream *bs); 138 virtual void ParseStartGame(CBytestream *bs); 139 virtual void ParseFlagInfo(CBytestream* bs); 140 virtual void ParseTeamScoreUpdate(CBytestream* bs); 141 virtual void ParseWormProps(CBytestream* bs); 142 virtual void ParseSelectWeapons(CBytestream* bs); 143 144 void ParseFeatureSettings(CBytestream* bs); 145 146 virtual void SendDeath(int victim, int killer); 147 virtual void SendReportDamage(bool flush = false); 148 virtual void QueueReportDamage(int victim, float damage, int offender); 149 150 private: 151 AbsTime fLastDamageReportSent; 152 std::map< std::pair< int, int >, float > cDamageReport; 153 }; 154 155 #endif // __CCLIENT_NET_ENGINE_H__ 156