Changeset 7681 in orxonox.OLD for branches/network/src/lib/network/message_manager.cc
- Timestamp:
- May 18, 2006, 2:32:47 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/network/src/lib/network/message_manager.cc
r7678 r7681 29 29 { 30 30 this->setClassID( CL_MESSAGE_MANAGER, "MessageManager" ); 31 newNumber = 1; 32 setSynchronized( true ); 31 33 } 32 34 … … 180 182 assert( i + messageLength <= length ); 181 183 assert( messageHandlerMap.find( (MessageId)messageId ) != messageHandlerMap.end() ); 182 (*(messageHandlerMap[(MessageId)messageId].cb))( (MessageId)messageId, data + i, messageLength, messageHandlerMap[(MessageId)messageId].someData, userId ); 184 if ( std::find( messageQueue[userId].recievedMessages.begin(), messageQueue[userId].recievedMessages.end(), number )== messageQueue[userId].recievedMessages.end() ) 185 { 186 (*(messageHandlerMap[(MessageId)messageId].cb))( (MessageId)messageId, data + i, messageLength, messageHandlerMap[(MessageId)messageId].someData, userId ); 187 messageQueue[userId].recievedMessages.push_back( number ); 188 } 183 189 i += messageLength; 190 } 191 192 193 //walk throu message queue and remove acked messages 194 for ( std::list<NetworkMessage>::iterator it = messageQueue[userId].messages.begin(); it != messageQueue[userId].messages.end(); ) 195 { 196 if ( std::find( acks.begin(), acks.end(), it->number) != acks.end() ) 197 { 198 std::list<NetworkMessage>::iterator delIt = it; 199 it++; 200 messageQueue[userId].messages.erase( delIt ); 201 continue; 202 } 203 it++; 204 } 205 206 //TODO find bether way. maybe with timestamp 207 if ( messageQueue[userId].recievedMessages.size() > 1000 ) 208 { 209 for ( int j = 0; j < messageQueue[userId].recievedMessages.size() - 1000; j++ ) 210 messageQueue[userId].recievedMessages.erase( messageQueue[userId].recievedMessages.begin() ); 184 211 } 185 212 … … 238 265 assert( messageQueue[userId].messages.size() == 0 ); 239 266 } 267 268 /** 269 * send a message to one or more clients 270 * recieverType: 271 * RT_ALL send to all users. reciever is ignored 272 * RT_USER send only to reciever 273 * RT_NOT_USER send to all but reciever 274 * 275 * @param messageId message id 276 * @param data pointer to data 277 * @param dataLength length of data 278 * @param recieverType 279 * @param reciever 280 */ 281 void MessageManager::sendMessage( MessageId messageId, byte * data, int dataLength, RecieverType recieverType, int reciever, MessagePriority messagePriority ) 282 { 283 for ( MessageQueue::iterator it = messageQueue.begin(); it != messageQueue.end(); it++ ) 284 { 285 if ( 286 recieverType == RT_ALL || 287 recieverType == RT_USER && it->first == reciever || 288 recieverType == RT_NOT_USER && it->first != reciever 289 ) 290 { 291 NetworkMessage msg; 292 293 msg.data = new byte[dataLength]; 294 memcpy( msg.data, data, dataLength ); 295 msg.length = dataLength; 296 msg.messageId = messageId; 297 msg.number = newNumber++; 298 msg.priority = messagePriority; 299 300 it->second.messages.push_back( msg ); 301 } 302 } 303 } 304 305
Note: See TracChangeset
for help on using the changeset viewer.