Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Oct 12, 2008, 7:40:47 PM (16 years ago)
Author:
scheusso
Message:

merged network branch back to trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/trunk/src/network/Server.cc

    r1856 r1907  
    5656#include "packet/Packet.h"
    5757#include "packet/Welcome.h"
     58#include "packet/DeleteObjects.h"
    5859#include <util/Convert.h>
    5960
     
    7172    connection = new ConnectionManager();
    7273    gamestates_ = new GamestateManager();
    73     isServer_ = true;
    7474  }
    7575
     
    7878    connection = new ConnectionManager(port);
    7979    gamestates_ = new GamestateManager();
    80     isServer_ = true;
    8180  }
    8281
     
    9089    connection = new ConnectionManager(port, bindAddress);
    9190    gamestates_ = new GamestateManager();
    92     isServer_ = true;
    9391  }
    9492
     
    102100    connection = new ConnectionManager(port, bindAddress);
    103101    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_;
    105112  }
    106113
     
    121128  }
    122129
    123   bool Server::processChat(packet::Chat *message, unsigned int clientID){
     130  bool Server::processChat(std::string message, unsigned int playerID){
    124131    ClientInformation *temp = ClientInformation::getBegin();
     132    packet::Chat *chat;
    125133    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);
    144135      chat->setClientID(temp->getID());
    145136      if(!chat->send())
    146137        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
    164144
    165145  /**
     
    174154    if(timeSinceLastUpdate_>=(1./NETWORK_FREQUENCY)){
    175155      timeSinceLastUpdate_=(float)((int)(timeSinceLastUpdate_*NETWORK_FREQUENCY))/timeSinceLastUpdate_;
    176 //      timeSinceLastUpdate_-=1./NETWORK_FREQUENCY;
    177156      gamestates_->processGamestates();
    178157      updateGamestate();
    179158    }
    180     /*while(timeSinceLastUpdate_>1./NETWORK_FREQUENCY)
    181       timeSinceLastUpdate_-=1./NETWORK_FREQUENCY;*/
    182 //     usleep(5000); // TODO remove
    183     return;
    184159  }
    185160
     
    230205    //if(clients->getGamestateID()!=GAMESTATEID_INITIAL)
    231206    sendGameState();
     207    sendObjectDeletes();
    232208    COUT(5) << "Server: one sendGameState turn complete, repeat in next tick" << std::endl;
    233209    //std::cout << "sent gamestate" << std::endl;
     
    276252      // gs gets automatically deleted by enet callback
    277253    }
    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
    295281
    296282  bool Server::addClient(ENetEvent *event){
     
    328314    packet::Welcome *w = new packet::Welcome(temp->getID(), temp->getShipID());
    329315    w->setClientID(temp->getID());
    330     assert(w->send());
     316    bool b = w->send();
     317    assert(b);
    331318    packet::Gamestate *g = new packet::Gamestate();
    332319    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);
    336326    return true;
    337327  }
     
    347337    orxonox::SpaceShip *no = dynamic_cast<orxonox::SpaceShip *>(id->fabricate());
    348338    no->classID = id->getNetworkID();
    349     client->setShipID(no->objectID);
     339    client->setShipID(no->getObjectID());
    350340    no->setPosition(orxonox::Vector3(0,0,80));
    351341    no->setScale(10);
     
    376366    gamestates_->removeClient(client);
    377367    while(it){
    378       if(it->objectID!=client->getShipID()){
     368      if(it->getObjectID()!=client->getShipID()){
    379369        ++it;
    380370        continue;
     
    397387    gamestates_->removeClient(client);
    398388  }
     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  }
    399403
    400404}
Note: See TracChangeset for help on using the changeset viewer.