Changeset 8623 in orxonox.OLD for trunk/src/lib/network/network_game_manager.cc
- Timestamp:
- Jun 20, 2006, 1:39:01 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/lib/network/network_game_manager.cc
r8362 r8623 23 23 #include "state.h" 24 24 #include "class_list.h" 25 #include "debug.h" 25 26 26 27 #include "network_stream.h" … … 39 40 #include "network_game_manager.h" 40 41 41 #include "debug.h"42 43 42 44 43 /* using namespace std is default, this needs to be here */ … … 59 58 60 59 this->setSynchronized(true); 61 60 62 61 MessageManager::getInstance()->registerMessageHandler( MSGID_DELETESYNCHRONIZEABLE, delSynchronizeableHandler, NULL ); 63 62 MessageManager::getInstance()->registerMessageHandler( MSGID_PREFEREDTEAM, preferedTeamHandler, NULL ); 64 63 MessageManager::getInstance()->registerMessageHandler( MSGID_CHATMESSAGE, chatMessageHandler, NULL ); 64 65 65 this->gameState = 0; 66 66 registerVar( new SynchronizeableInt( &gameState, &gameState, "gameState" ) ); … … 72 72 NetworkGameManager::~NetworkGameManager() 73 73 { 74 delete MessageManager::getInstance(); 75 76 PlayerStats::deleteAllPlayerStats(); 74 77 } 75 78 … … 77 80 /** 78 81 * insert new player into game 79 * @param userId 80 * @return 82 * @param userId 83 * @return 81 84 */ 82 85 bool NetworkGameManager::signalNewPlayer( int userId ) … … 85 88 assert( State::getGameRules() ); 86 89 assert( State::getGameRules()->isA( CL_NETWORK_GAME_RULES ) ); 87 90 88 91 NetworkGameRules & rules = *(dynamic_cast<NetworkGameRules*>(State::getGameRules())); 89 92 90 93 int team = rules.getTeamForNewUser(); 91 94 ClassID playableClassId = rules.getPlayableClassId( userId, team ); 92 95 std::string playableModel = rules.getPlayableModelFileName( userId, team, playableClassId ); 93 96 94 97 BaseObject * bo = Factory::fabricate( playableClassId ); 95 98 96 99 assert( bo != NULL ); 97 100 assert( bo->isA( CL_PLAYABLE ) ); 98 101 99 102 Playable & playable = *(dynamic_cast<Playable*>(bo)); 100 101 playable.loadModel( playableModel ); 103 104 if ( playableModel != "" ) 105 playable.loadModel( playableModel ); 102 106 playable.setOwner( userId ); 103 107 playable.setUniqueID( SharedNetworkData::getInstance()->getNewUniqueID() ); 104 108 playable.setSynchronized( true ); 105 109 106 110 PlayerStats * stats = rules.getNewPlayerStats( userId ); 107 111 108 112 stats->setUniqueID( SharedNetworkData::getInstance()->getNewUniqueID() ); 109 113 stats->setSynchronized( true ); 110 114 stats->setOwner( getHostID() ); 111 115 112 116 stats->setTeamId( team ); 113 117 stats->setPlayableClassId( playableClassId ); 114 118 stats->setPlayableUniqueId( playable.getUniqueID() ); 115 119 stats->setModelFileName( playableModel ); 116 120 117 121 return true; 118 122 } … … 121 125 /** 122 126 * remove player from game 123 * @param userID 124 * @return 127 * @param userID 128 * @return 125 129 */ 126 130 bool NetworkGameManager::signalLeftPlayer(int userID) … … 132 136 delete PlayerStats::getStats( userID ); 133 137 } 134 138 135 139 return true; 136 140 } … … 140 144 /** 141 145 * handler for remove synchronizeable messages 142 * @param messageId 143 * @param data 144 * @param dataLength 145 * @param someData 146 * @param userId 146 * @param messageId 147 * @param data 148 * @param dataLength 149 * @param someData 150 * @param userId 147 151 * @return true on successfull handling else handler will be called again 148 152 */ … … 154 158 return true; 155 159 } 156 160 157 161 int uniqueId = 0; 158 162 int len = Converter::byteArrayToInt( data, &uniqueId ); 159 163 160 164 if ( len != dataLength ) 161 165 { … … 163 167 return true; 164 168 } 165 169 166 170 const std::list<BaseObject*> * list = ClassList::getList( CL_SYNCHRONIZEABLE ); 167 171 168 172 for ( std::list<BaseObject*>::const_iterator it = list->begin(); it != list->end(); it++ ) 169 173 { … … 175 179 return true; 176 180 } 177 181 178 182 delete dynamic_cast<Synchronizeable*>(*it); 179 183 return true; 180 184 } 181 185 } 182 186 183 187 return true; 184 188 } … … 191 195 { 192 196 byte buf[INTSIZE]; 193 197 194 198 assert( Converter::intToByteArray( uniqueId, buf, INTSIZE ) == INTSIZE ); 195 199 … … 201 205 /** 202 206 * handler for MSGID_PREFEREDTEAM message 203 * @param messageId 204 * @param data 205 * @param dataLength 206 * @param someData 207 * @param userId 208 * @return 207 * @param messageId 208 * @param data 209 * @param dataLength 210 * @param someData 211 * @param userId 212 * @return 209 213 */ 210 214 bool NetworkGameManager::preferedTeamHandler( MessageId messageId, byte * data, int dataLength, void * someData, int userId ) 211 215 { 212 216 assert( NetworkGameManager::getInstance()->isServer() ); 213 217 214 218 int teamId = 0; 215 219 int len = Converter::byteArrayToInt( data, &teamId ); 216 220 217 221 if ( len != dataLength ) 218 222 { … … 220 224 return true; 221 225 } 222 226 223 227 NetworkGameManager::getInstance()->setPreferedTeam( userId, teamId ); 224 228 225 229 return true; 226 230 } … … 230 234 if ( !PlayerStats::getStats( userId ) ) 231 235 return; 232 236 233 237 PlayerStats & stats = *(PlayerStats::getStats( userId )); 234 238 235 239 stats.setPreferedTeamId( teamId ); 236 240 } … … 238 242 /** 239 243 * set prefered team for this host 240 * @param teamId 244 * @param teamId 241 245 */ 242 246 void NetworkGameManager::prefereTeam( int teamId ) … … 247 251 { 248 252 byte buf[INTSIZE]; 249 253 250 254 assert( Converter::intToByteArray( teamId, buf, INTSIZE) == INTSIZE ); 251 255 252 256 MessageManager::getInstance()->sendMessage( MSGID_PREFEREDTEAM, buf, INTSIZE, RT_USER, 0, MP_HIGHBANDWIDTH ); 253 257 } … … 278 282 279 283 280 284 bool NetworkGameManager::chatMessageHandler( MessageId messageId, byte * data, int dataLength, void * someData, int userId ) 285 { 286 assert( State::getGameRules() ); 287 assert( State::getGameRules()->isA( CL_NETWORK_GAME_RULES ) ); 288 289 NetworkGameRules & rules = *(dynamic_cast<NetworkGameRules*>(State::getGameRules())); 290 291 if ( dataLength < 2*INTSIZE ) 292 { 293 PRINTF(2)("got too small chatmessage from client %d\n", userId); 294 295 return true; 296 } 297 298 int messageType = 0; 299 Converter::byteArrayToInt( data, &messageType ); 300 std::string message; 301 Converter::byteArrayToString( data+INTSIZE, message, dataLength-INTSIZE ); 302 303 rules.handleChatMessage( userId, message, messageType ); 304 305 return true; 306 } 307 308 /** 309 * send chat message 310 * @param message message text 311 * @param messageType some int 312 * @param userId user to send message to -1 = ALL 313 */ 314 void NetworkGameManager::sendChatMessage( const std::string & message, int messageType, int userId ) 315 { 316 byte * buf = new byte[message.length()+2*INTSIZE]; 317 318 assert( Converter::intToByteArray( messageType, buf, INTSIZE ) == INTSIZE ); 319 assert( Converter::stringToByteArray(message, buf+INTSIZE, message.length()+INTSIZE) == message.length()+INTSIZE ); 320 321 if ( userId == -1 ) 322 MessageManager::getInstance()->sendMessage( MSGID_CHATMESSAGE, buf, message.length()+2*INTSIZE, RT_ALL_ME, 0, MP_HIGHBANDWIDTH ); 323 else 324 MessageManager::getInstance()->sendMessage( MSGID_CHATMESSAGE, buf, message.length()+2*INTSIZE, RT_USER, userId, MP_HIGHBANDWIDTH ); 325 326 delete [] buf; 327 } 328 329 330
Note: See TracChangeset
for help on using the changeset viewer.