- Timestamp:
- Jun 7, 2006, 1:16:12 PM (18 years ago)
- Location:
- branches/network/src
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/network/src/lib/network/message_manager.cc
r8068 r8184 17 17 18 18 #include "message_manager.h" 19 20 #include "network_stream.h" 19 21 20 22 using namespace std; … … 312 314 recieverType == RT_ALL_NOT_ME || 313 315 recieverType == RT_USER && it->first == reciever || 314 recieverType == RT_NOT_USER && it->first != reciever 316 recieverType == RT_NOT_USER && it->first != reciever || 317 recieverType == RT_SERVER && getNetworkStream()->isUserServer( it->first ) 315 318 ) 316 319 { -
branches/network/src/lib/network/message_manager.h
r8147 r8184 30 30 TESTMESSAGEID = 1, 31 31 MSGID_DELETESYNCHRONIZEABLE, 32 MSGID_PREFEREDTEAM 32 MSGID_PREFEREDTEAM, 33 MSGID_CHANGEPLAYERNAME 33 34 }; 34 35 … … 40 41 RT_ALL_ME, //!< message is sent to all users 41 42 RT_USER, //!< message is only sent to reciever 42 RT_NOT_USER //!< message is sent to all but reciever 43 RT_NOT_USER, //!< message is sent to all but reciever 44 RT_SERVER //!< message is sent to server only 43 45 }; 44 46 -
branches/network/src/lib/network/network_manager.cc
r8147 r8184 51 51 52 52 /* initialize the references */ 53 this->netStreamList = NULL; 54 this->syncList = NULL; 55 this->defaultSyncStream = NULL; 53 this->networkStream = NULL; 56 54 this->sharedNetworkData = SharedNetworkData::getInstance(); 57 55 this->elapsedTime = 0.0f; … … 71 69 */ 72 70 NetworkManager::~NetworkManager() 73 {} 71 { 72 if ( this->networkStream ) 73 { 74 delete this->networkStream; 75 this->networkStream = NULL; 76 } 77 } 74 78 75 79 … … 79 83 void NetworkManager::initialize() 80 84 { 81 /* get the synchronizeable list from the class list */82 this->netStreamList = ClassList::getList(CL_SYNCHRONIZEABLE);83 85 PRINTF(0)("NetworkManager initzalized\n"); 84 85 86 } 86 87 … … 101 102 int NetworkManager::establishConnection(const std::string & name, unsigned int port) 102 103 { 103 this-> defaultSyncStream = new NetworkStream( name, port );104 this->sharedNetworkData->setDefaultSyncStream(this-> defaultSyncStream);105 this-> defaultSyncStream->startHandshake();104 this->networkStream = new NetworkStream( name, port ); 105 this->sharedNetworkData->setDefaultSyncStream(this->networkStream); 106 this->networkStream->startHandshake(); 106 107 return 1; 107 108 } … … 116 117 this->sharedNetworkData->setHostID(0); 117 118 this->sharedNetworkData->setGameServer(true); 118 this-> defaultSyncStream = new NetworkStream(port);119 this->sharedNetworkData->setDefaultSyncStream(this-> defaultSyncStream);120 this-> defaultSyncStream->createNetworkGameManager();119 this->networkStream = new NetworkStream(port); 120 this->sharedNetworkData->setDefaultSyncStream(this->networkStream); 121 this->networkStream->createNetworkGameManager(); 121 122 PRINTF(0)("CREATE SERVER\n"); 122 123 SDL_Delay(20); … … 127 128 void NetworkManager::connectSynchronizeable(Synchronizeable& sync) 128 129 { 129 if( this-> defaultSyncStream)130 this-> defaultSyncStream->connectSynchronizeable(sync);130 if( this->networkStream) 131 this->networkStream->connectSynchronizeable(sync); 131 132 } 132 133 … … 143 144 this->elapsedTime = 0.0f; 144 145 145 if (this->netStreamList != NULL || (this->netStreamList = ClassList::getList(CL_NETWORK_STREAM)) != NULL) 146 { 147 std::list<BaseObject*>::const_iterator stream; 148 for (stream = this->netStreamList->begin(); stream != this->netStreamList->end(); ++stream) 149 if( static_cast<NetworkStream*>(*stream)->isActive()) 150 static_cast<NetworkStream*>(*stream)->processData(); 151 } 146 if ( networkStream->isActive() ) 147 networkStream->processData(); 152 148 153 149 NetworkGameManager::getInstance()->tick( this->elapsedTime ); … … 162 158 { 163 159 PRINT(0)("=================Network::debug()=========\n"); 164 this-> defaultSyncStream->debug();160 this->networkStream->debug(); 165 161 PRINT(0)("===========================================\n"); 166 162 } -
branches/network/src/lib/network/network_manager.h
r7954 r8184 55 55 56 56 private: 57 const std::list<BaseObject*>* netStreamList; // list with refs to all network streams58 const std::list<BaseObject*>* syncList; // list of synchronizeables59 57 static NetworkManager* singletonRef; //!< Pointer to the only instance of this Class 60 NetworkStream* defaultSyncStream; //!< FIXME: this is only for testing purposes58 NetworkStream* networkStream; //!< pointer to network stream 61 59 62 60 SharedNetworkData* sharedNetworkData; //!< reference to the shared data -
branches/network/src/lib/network/player_stats.cc
r8153 r8184 62 62 playableUniqueId_handle = registerVarId( new SynchronizeableInt( &playableUniqueId, &playableUniqueId, "playableUniqueId" ) ); 63 63 modelFileName_handle = registerVarId( new SynchronizeableString( &modelFileName, &modelFileName, "modelFileName" ) ); 64 playerName_handle = registerVarId( new SynchronizeableString( &playerName, &playerName, "playerName" ) ); 65 66 MessageManager::getInstance()->registerMessageHandler( MSGID_CHANGEPLAYERNAME, changePlayernameHandler, NULL ); 64 67 65 68 PRINTF(0)("PlayerStats created\n"); … … 164 167 } 165 168 166 169 bool PlayerStats::changePlayernameHandler( MessageId messageId, byte * data, int dataLength, void * someData, int userId ) 170 { 171 if ( !SharedNetworkData::getInstance()->isGameServer() ) 172 return true; 173 174 if ( Converter::byteArrayToString( data, getStats(userId)->playerName, dataLength ) != dataLength ); 175 { 176 PRINTF(1)("recieved invalid message from user %d\n", userId); 177 // TODO give user a name 178 getStats( userId )->playerName = "invalid name"; 179 } 180 181 return true; 182 } 183 184 std::string PlayerStats::setPlayerName( std::string name ) 185 { 186 if ( isServer() ) 187 { 188 this->playerName = name; 189 } 190 else 191 { 192 if ( userId == getHostID() ) 193 { 194 byte * data = new byte[INTSIZE+playerName.length()]; 195 196 assert( Converter::stringToByteArray( playerName, data, INTSIZE+playerName.length() ) == INTSIZE+playerName.length() ); 197 198 MessageManager::getInstance()->sendMessage( MSGID_CHANGEPLAYERNAME, data, INTSIZE+playerName.length(), RT_SERVER, 0, MP_HIGHBANDWIDTH ); 199 } 200 else 201 { 202 PRINTF(1)("Clients cannot set PlayerNames of other hosts!\n"); 203 } 204 } 205 } 206 207 -
branches/network/src/lib/network/player_stats.h
r8068 r8184 9 9 #include "synchronizeable.h" 10 10 #include "playable.h" 11 #include "message_manager.h" 11 12 12 13 #include <string> … … 35 36 inline int getUserId(){ return userId; } 36 37 38 inline std::string getPlayerName(){ return playerName; } 39 inline std::string setPlayerName( std::string name ); 40 37 41 inline int getTeamId(){ return teamId; } 38 42 inline void setTeamId( int teamId ){ this->teamId = teamId; } … … 54 58 55 59 Playable * getPlayable(); 60 61 static bool changePlayernameHandler( MessageId messageId, byte * data, int dataLength, void * someData, int userId ); 56 62 57 63 private: 58 64 int userId; //!< userId 65 66 std::string playerName; //!< playername 67 59 68 int teamId; //!< teamId 60 69 int preferedTeamId; //!< preferedTeamId … … 69 78 // handles for SynchronizeableVars 70 79 int userId_handle; 80 int playerName_handle; 71 81 int teamId_handle; 72 82 int preferedTeamId_handle; -
branches/network/src/lib/network/udp_server_socket.cc
r7954 r8184 44 44 UdpServerSocket::~UdpServerSocket( ) 45 45 { 46 for ( int i = 0; i < packetBuffer.size(); i++ )46 for ( int i = 0; i < (int)packetBuffer.size(); i++ ) 47 47 removeUserPackets( i ); 48 48 … … 99 99 { 100 100 101 for ( int i = 0; i < packetBuffer.size(); i++ )101 for ( int i = 0; i < (int)packetBuffer.size(); i++ ) 102 102 removeUserPackets( i ); 103 103 … … 115 115 void UdpServerSocket::removeUserPackets( int userId ) 116 116 { 117 if ( userId >= packetBuffer.size() )117 if ( userId >= (int)packetBuffer.size() ) 118 118 return; 119 119 … … 141 141 res.length = 0; 142 142 143 if ( packetBuffer.size() > userId &&packetBuffer[userId].size() > 0 )143 if ( (int)packetBuffer.size() > userId && (int)packetBuffer[userId].size() > 0 ) 144 144 { 145 145 res.data = packetBuffer[userId].front().data; 146 146 res.length = packetBuffer[userId].front().length; 147 147 packetBuffer[userId].pop_front(); 148 149 if ( res.length == 0 ) 150 res.length = -1; 148 151 } 149 152 … … 158 161 int UdpServerSocket::getPacketCount( int userId ) 159 162 { 160 if ( userId >= packetBuffer.size() )163 if ( userId >= (int)packetBuffer.size() ) 161 164 return -1; 162 165 … … 179 182 } 180 183 181 if ( userId < packetBuffer.size() )184 if ( userId < (int)packetBuffer.size() ) 182 185 removeUserPackets( userId ); 183 186 184 if ( packetBuffer.size() <= userId )187 if ( (int)packetBuffer.size() <= userId ) 185 188 packetBuffer.resize( userId + 1 ); 186 189 187 if ( userList.size() <= userId )190 if ( (int)userList.size() <= userId ) 188 191 userList.resize( userId + 1 ); 189 192 … … 199 202 removeUserPackets( userId ); 200 203 201 if ( userId >= userList.size() )204 if ( userId >= (int)userList.size() ) 202 205 return; 203 206 … … 244 247 bool isNewConnection = false; 245 248 246 for ( userId =0; userId < userList.size(); userId++ )249 for ( userId =0; userId < (int)userList.size(); userId++ ) 247 250 if ( userList[userId].host == packet->address.host && userList[userId].port == packet->address.port ) 248 251 break; 249 252 250 if ( userId >= userList.size() )253 if ( userId >= (int)userList.size() ) 251 254 { 252 255 … … 260 263 } 261 264 262 for ( userId =0; userId < userList.size(); userId++ )265 for ( userId =0; userId < (int)userList.size(); userId++ ) 263 266 if ( userList[userId].host == 0 && userList[userId].port == 0 ) 264 267 break; … … 281 284 else 282 285 { 283 if ( isNewConnection )284 continue;285 286 286 networkPacket.data = NULL; 287 287 } -
branches/network/src/lib/network/udp_socket.cc
r7954 r8184 81 81 UdpSocket::~UdpSocket( ) 82 82 { 83 this->disconnectServer(); 84 83 85 if ( serverSocket ) 84 86 serverSocket->removeUser( userId ); 85 86 disconnectServer(); 87 87 88 88 if ( this->packet ) 89 89 SDLNet_FreePacket( this->packet ); … … 128 128 return; 129 129 } 130 130 } 131 132 /** 133 * disconnect from server 134 */ 135 void UdpSocket::disconnectServer( ) 136 { 137 PRINTF(0)("disconnect from server\n"); 131 138 writePacket( NULL, 0 ); 132 }133 134 /**135 * disconnect from server136 */137 void UdpSocket::disconnectServer( )138 {139 139 SDLNet_UDP_Unbind( socket, -1 ); 140 140 SDLNet_UDP_Close( socket ); … … 196 196 NetworkPacket networkPacket = serverSocket->getPacket( this->userId ); 197 197 198 if ( networkPacket.length == -1 ) 199 { 200 this->disconnectServer(); 201 return 0; 202 } 203 198 204 if ( networkPacket.length > 0 ) 199 205 { … … 218 224 assert( packet->len <= maxLength ); 219 225 226 if ( packet->len == 0 ) 227 { 228 this->disconnectServer(); 229 return 0; 230 } 231 220 232 memcpy( data, packet->data, packet->len ); 221 233 return packet->len; -
branches/network/src/story_entities/multi_player_world.cc
r8068 r8184 26 26 27 27 #include "network_manager.h" 28 #include "network_game_manager.h" 28 29 29 30 … … 119 120 ((MultiPlayerWorldData*)this->dataTank)->debug(); 120 121 } 122 123 /** 124 * cleanup 125 * @return 126 */ 127 ErrorMessage MultiPlayerWorld::unloadData( ) 128 { 129 GameWorld::unloadData(); 130 131 delete NetworkManager::getInstance(); 132 delete NetworkGameManager::getInstance(); 133 } -
branches/network/src/story_entities/multi_player_world.h
r8068 r8184 26 26 27 27 virtual void loadParams(const TiXmlElement* root); 28 29 virtual ErrorMessage unloadData(); 28 30 29 31 void debug(); -
branches/network/src/util/signal_handler.cc
r8068 r8184 17 17 #include <assert.h> 18 18 19 SignalHandler * SignalHandler::singletonRef = NULL; 20 19 21 #ifndef __WIN32__ 20 21 SignalHandler * SignalHandler::singletonRef = NULL;22 22 23 23 SignalHandler::SignalHandler() … … 59 59 void SignalHandler::sigHandler( int sig ) 60 60 { 61 for ( SignalCallbackList::iterator it = SignalHandler::getInstance()->callbackList.begin(); it != SignalHandler::getInstance()->callbackList.end(); it++ ) 62 { 63 (*(it->cb))( it->someData ); 64 } 65 61 66 std::string sigName = "UNKNOWN"; 62 67 … … 113 118 } 114 119 120 void SignalHandler::registerCallback( SignalCallback cb, void * someData ) 121 { 122 SignalCallbackRec rec; 123 rec.cb = cb; 124 rec.someData = someData; 125 126 callbackList.push_back(rec); 127 } 128 115 129 #endif /* __WIN32__ */ -
branches/network/src/util/signal_handler.h
r7440 r8184 17 17 }; 18 18 19 typedef bool (*SignalCallback)( void * someData ); 19 20 20 21 #ifndef __WIN32__ … … 27 28 }; 28 29 30 struct SignalCallbackRec 31 { 32 SignalCallback cb; 33 void * someData; 34 }; 35 29 36 30 37 typedef std::list<SignalRec> SignalRecList; 38 typedef std::list<SignalCallbackRec> SignalCallbackList; 31 39 32 40 class SignalHandler … … 35 43 SignalHandler(); 36 44 public: 37 inline static SignalHandler* getInstance() { if (!SignalHandler::singletonRef) SignalHandler::singletonRef = new SignalHandler(); 38 return SignalHandler::singletonRef; } 45 inline static SignalHandler* getInstance() { if (!SignalHandler::singletonRef) SignalHandler::singletonRef = new SignalHandler(); return SignalHandler::singletonRef; } 46 47 void registerCallback( SignalCallback cb, void * someData ); 39 48 40 49 void doCatch( std::string appName, GdbRunType type = GDB_RUN_WRITE_TO_FILE ); … … 46 55 void catchSignal( int sig ); 47 56 SignalRecList sigRecList; 57 58 SignalCallbackList callbackList; 48 59 49 60 static SignalHandler * singletonRef; … … 58 69 { 59 70 public: 60 inline static SignalHandler* getInstance() {};71 inline static SignalHandler* getInstance() { if (!SignalHandler::singletonRef) SignalHandler::singletonRef = new SignalHandler(); return SignalHandler::singletonRef; }; 61 72 void doCatch( std::string appName, GdbRunType type = GDB_RUN_WRITE_TO_FILE ) {}; 62 73 void dontCatch() {}; 74 void registerCallback( SignalCallback cb, void * someData ) {}; 63 75 }; 64 76 #endif
Note: See TracChangeset
for help on using the changeset viewer.