Changeset 1907 for code/trunk/src/network/Server.cc
- Timestamp:
- Oct 12, 2008, 7:40:47 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk/src/network/Server.cc
r1856 r1907 56 56 #include "packet/Packet.h" 57 57 #include "packet/Welcome.h" 58 #include "packet/DeleteObjects.h" 58 59 #include <util/Convert.h> 59 60 … … 71 72 connection = new ConnectionManager(); 72 73 gamestates_ = new GamestateManager(); 73 isServer_ = true;74 74 } 75 75 … … 78 78 connection = new ConnectionManager(port); 79 79 gamestates_ = new GamestateManager(); 80 isServer_ = true;81 80 } 82 81 … … 90 89 connection = new ConnectionManager(port, bindAddress); 91 90 gamestates_ = new GamestateManager(); 92 isServer_ = true;93 91 } 94 92 … … 102 100 connection = new ConnectionManager(port, bindAddress); 103 101 gamestates_ = new GamestateManager(); 104 isServer_ = true; 102 } 103 104 /** 105 * @brief Destructor 106 */ 107 Server::~Server(){ 108 if(connection) 109 delete connection; 110 if(gamestates_) 111 delete gamestates_; 105 112 } 106 113 … … 121 128 } 122 129 123 bool Server::processChat( packet::Chat *message, unsigned int clientID){130 bool Server::processChat(std::string message, unsigned int playerID){ 124 131 ClientInformation *temp = ClientInformation::getBegin(); 132 packet::Chat *chat; 125 133 while(temp){ 126 message->setClientID(temp->getID()); 127 if(!message->send()) 128 COUT(3) << "could not send Chat message to client ID: " << temp->getID() << std::endl; 129 temp = temp->next(); 130 } 131 return message->process(); 132 } 133 134 /** 135 * This function sends out a message to all clients 136 * @param msg message 137 * @return true/false 138 */ 139 bool Server::sendChat(packet::Chat *chat) { 140 //TODO: change this (no informations about who wrote a message) 141 assert(0); 142 ClientInformation *temp = ClientInformation::getBegin(); 143 while(temp){ 134 chat = new packet::Chat(message, playerID); 144 135 chat->setClientID(temp->getID()); 145 136 if(!chat->send()) 146 137 COUT(3) << "could not send Chat message to client ID: " << temp->getID() << std::endl; 147 } 148 return chat->process();; 149 } 150 151 /** 152 * This function sends out a message to all clients 153 * @param msg message 154 * @return true/false 155 */ 156 // bool Server::sendChat(const char *msg) { 157 // char *message = new char [strlen(msg)+10+1]; 158 // sprintf(message, "Player %d: %s", CLIENTID_SERVER, msg); 159 // COUT(1) << message << std::endl; 160 // ENetPacket *packet = packet_gen.chatMessage(message); 161 // COUT(5) <<"Server: adding Packets" << std::endl; 162 // return connection->addPacketAll(packet); 163 // } 138 temp = temp->next(); 139 } 140 COUT(1) << "Player " << playerID << ": " << message << std::endl; 141 return true; 142 } 143 164 144 165 145 /** … … 174 154 if(timeSinceLastUpdate_>=(1./NETWORK_FREQUENCY)){ 175 155 timeSinceLastUpdate_=(float)((int)(timeSinceLastUpdate_*NETWORK_FREQUENCY))/timeSinceLastUpdate_; 176 // timeSinceLastUpdate_-=1./NETWORK_FREQUENCY;177 156 gamestates_->processGamestates(); 178 157 updateGamestate(); 179 158 } 180 /*while(timeSinceLastUpdate_>1./NETWORK_FREQUENCY)181 timeSinceLastUpdate_-=1./NETWORK_FREQUENCY;*/182 // usleep(5000); // TODO remove183 return;184 159 } 185 160 … … 230 205 //if(clients->getGamestateID()!=GAMESTATEID_INITIAL) 231 206 sendGameState(); 207 sendObjectDeletes(); 232 208 COUT(5) << "Server: one sendGameState turn complete, repeat in next tick" << std::endl; 233 209 //std::cout << "sent gamestate" << std::endl; … … 276 252 // gs gets automatically deleted by enet callback 277 253 } 278 /*if(added) { 279 //std::cout << "send gamestates from server.cc in sendGameState" << std::endl; 280 return connection->sendPackets(); 281 }*/ 282 //COUT(5) << "Server: had no gamestates to send" << std::endl; 283 return true; 284 } 285 286 // void Server::processChat( chat *data, int clientId){ 287 // char *message = new char [strlen(data->message)+10+1]; 288 // sprintf(message, "Player %d: %s", clientId, data->message); 289 // COUT(1) << message << std::endl; 290 // ENetPacket *pck = packet_gen.chatMessage(message); 291 // connection->addPacketAll(pck); 292 // delete[] data->message; 293 // delete data; 294 // } 254 return true; 255 } 256 257 bool Server::sendObjectDeletes(){ 258 ClientInformation *temp = ClientInformation::getBegin(); 259 packet::DeleteObjects *del = new packet::DeleteObjects(); 260 if(!del->fetchIDs()) 261 return true; //everything ok (no deletes this tick) 262 // COUT(3) << "sending DeleteObjects" << std::endl; 263 while(temp != NULL){ 264 if( !(temp->getSynched()) ){ 265 COUT(5) << "Server: not sending gamestate" << std::endl; 266 temp=temp->next(); 267 continue; 268 } 269 int cid = temp->getID(); //get client id 270 packet::DeleteObjects *cd = new packet::DeleteObjects(*del); 271 assert(cd); 272 cd->setClientID(cid); 273 if ( !cd->send() ) 274 COUT(3) << "Server: packet with client id (cid): " << cid << " not sended: " << temp->getFailures() << std::endl; 275 temp=temp->next(); 276 // gs gets automatically deleted by enet callback 277 } 278 return true; 279 } 280 295 281 296 282 bool Server::addClient(ENetEvent *event){ … … 328 314 packet::Welcome *w = new packet::Welcome(temp->getID(), temp->getShipID()); 329 315 w->setClientID(temp->getID()); 330 assert(w->send()); 316 bool b = w->send(); 317 assert(b); 331 318 packet::Gamestate *g = new packet::Gamestate(); 332 319 g->setClientID(temp->getID()); 333 assert(g->collectData(0)); 334 assert(g->compressData()); 335 assert(g->send()); 320 b = g->collectData(0); 321 assert(b); 322 b = g->compressData(); 323 assert(b); 324 b = g->send(); 325 assert(b); 336 326 return true; 337 327 } … … 347 337 orxonox::SpaceShip *no = dynamic_cast<orxonox::SpaceShip *>(id->fabricate()); 348 338 no->classID = id->getNetworkID(); 349 client->setShipID(no-> objectID);339 client->setShipID(no->getObjectID()); 350 340 no->setPosition(orxonox::Vector3(0,0,80)); 351 341 no->setScale(10); … … 376 366 gamestates_->removeClient(client); 377 367 while(it){ 378 if(it-> objectID!=client->getShipID()){368 if(it->getObjectID()!=client->getShipID()){ 379 369 ++it; 380 370 continue; … … 397 387 gamestates_->removeClient(client); 398 388 } 389 390 bool Server::chat(std::string message){ 391 ClientInformation *temp = ClientInformation::getBegin(); 392 packet::Chat *chat; 393 while(temp){ 394 chat = new packet::Chat(message, Host::getPlayerID()); 395 chat->setClientID(temp->getID()); 396 if(!chat->send()) 397 COUT(3) << "could not send Chat message to client ID: " << temp->getID() << std::endl; 398 temp = temp->next(); 399 } 400 COUT(1) << "Player " << Host::getPlayerID() << ": " << message << std::endl; 401 return true; 402 } 399 403 400 404 }
Note: See TracChangeset
for help on using the changeset viewer.