1 /* 2 * This file is part of Dune Legacy. 3 * 4 * Dune Legacy is free software: you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation, either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * Dune Legacy is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with Dune Legacy. If not, see <http://www.gnu.org/licenses/>. 16 */ 17 18 #ifndef METASERVERCOMMANDS_H 19 #define METASERVERCOMMANDS_H 20 21 #include <SDL.h> 22 #include <string> 23 24 25 #define METASERVERCOMMAND_ADD 1 26 #define METASERVERCOMMAND_UPDATE 2 27 #define METASERVERCOMMAND_REMOVE 3 28 #define METASERVERCOMMAND_LIST 4 29 #define METASERVERCOMMAND_EXIT 5 30 31 32 33 class MetaServerCommand { 34 public: MetaServerCommand(int type)35 explicit MetaServerCommand(int type) : type(type) { 36 } 37 ~MetaServerCommand()38 virtual ~MetaServerCommand() { 39 } 40 41 virtual bool operator==(const MetaServerCommand& metaServerCommand) const { 42 return (type == metaServerCommand.type); 43 } 44 45 int type; 46 }; 47 48 class MetaServerAdd : public MetaServerCommand { 49 public: MetaServerAdd(const std::string & serverName,int serverPort,const std::string & secret,const std::string & mapName,Uint8 numPlayers,Uint8 maxPlayers)50 MetaServerAdd(const std::string& serverName, int serverPort, const std::string& secret, const std::string& mapName, Uint8 numPlayers, Uint8 maxPlayers) 51 : MetaServerCommand(METASERVERCOMMAND_ADD), serverName(serverName), serverPort(serverPort), secret(secret), 52 mapName(mapName), numPlayers(numPlayers), maxPlayers(maxPlayers) { 53 } 54 55 bool operator==(const MetaServerCommand& metaServerCommand) const { 56 const MetaServerAdd* pMetaServerAdd = dynamic_cast<const MetaServerAdd*>(&metaServerCommand); 57 58 if(pMetaServerAdd == nullptr) { 59 return false; 60 } else { 61 62 return ((serverName == pMetaServerAdd->serverName) 63 && (serverPort == pMetaServerAdd->serverPort) 64 && (secret == pMetaServerAdd->secret) 65 && (mapName == pMetaServerAdd->mapName) 66 && (numPlayers == pMetaServerAdd->numPlayers) 67 && (maxPlayers == pMetaServerAdd->maxPlayers)); 68 } 69 } 70 71 std::string serverName; 72 int serverPort; 73 std::string secret; 74 std::string mapName; 75 Uint8 numPlayers; 76 Uint8 maxPlayers; 77 }; 78 79 class MetaServerUpdate : public MetaServerCommand { 80 public: MetaServerUpdate(const std::string & serverName,int serverPort,const std::string & secret,const std::string & mapName,Uint8 numPlayers,Uint8 maxPlayers)81 MetaServerUpdate(const std::string& serverName, int serverPort, const std::string& secret, const std::string& mapName, Uint8 numPlayers, Uint8 maxPlayers) 82 : MetaServerCommand(METASERVERCOMMAND_UPDATE), serverName(serverName), serverPort(serverPort), secret(secret), 83 mapName(mapName), numPlayers(numPlayers), maxPlayers(maxPlayers) { 84 } 85 86 bool operator==(const MetaServerCommand& metaServerCommand) const { 87 const MetaServerUpdate* pMetaServerUpdate = dynamic_cast<const MetaServerUpdate*>(&metaServerCommand); 88 89 if(pMetaServerUpdate == nullptr) { 90 return false; 91 } else { 92 93 return ((serverName == pMetaServerUpdate->serverName) 94 && (serverPort == pMetaServerUpdate->serverPort) 95 && (secret == pMetaServerUpdate->secret) 96 && (mapName == pMetaServerUpdate->mapName) 97 && (numPlayers == pMetaServerUpdate->numPlayers) 98 && (maxPlayers == pMetaServerUpdate->maxPlayers)); 99 } 100 } 101 102 std::string serverName; 103 int serverPort; 104 std::string secret; 105 std::string mapName; 106 Uint8 numPlayers; 107 Uint8 maxPlayers; 108 }; 109 110 class MetaServerRemove : public MetaServerCommand { 111 public: MetaServerRemove(int serverPort,const std::string & secret)112 MetaServerRemove(int serverPort, const std::string& secret) 113 : MetaServerCommand(METASERVERCOMMAND_REMOVE), serverPort(serverPort), secret(secret) { 114 } 115 116 bool operator==(const MetaServerCommand& metaServerCommand) const { 117 const MetaServerRemove* pMetaServerRemove = dynamic_cast<const MetaServerRemove*>(&metaServerCommand); 118 119 if(pMetaServerRemove == nullptr) { 120 return false; 121 } else { 122 123 return ((serverPort == pMetaServerRemove->serverPort) 124 && (secret == pMetaServerRemove->secret)); 125 } 126 } 127 128 int serverPort; 129 std::string secret; 130 }; 131 132 class MetaServerList : public MetaServerCommand { 133 public: MetaServerList()134 MetaServerList() 135 : MetaServerCommand(METASERVERCOMMAND_LIST) { 136 } 137 }; 138 139 class MetaServerExit : public MetaServerCommand { 140 public: MetaServerExit()141 MetaServerExit() 142 : MetaServerCommand(METASERVERCOMMAND_EXIT) { 143 } 144 }; 145 146 #endif // METASERVERCOMMANDS_H 147