src/Network/Server.cc
changeset 276 87434abc1ba1
parent 275 fa44b905bc2e
child 282 e0e4dfc3e528
equal deleted inserted replaced
275:fa44b905bc2e 276:87434abc1ba1
     6 #include "../Logger.hh"
     6 #include "../Logger.hh"
     7 
     7 
     8 #include <cassert>
     8 #include <cassert>
     9 
     9 
    10 NetworkServer::NetworkServer (GameState &state, const NetworkAddress &listen_addr) : 
    10 NetworkServer::NetworkServer (GameState &state, const NetworkAddress &listen_addr) : 
    11     state(state), netsession(NETWORK_MAGIC_ID), netobjs(netsession, NETCHAN_CORE) {
    11     state(state), netsession(NETWORK_MAGIC_ID), controller(netsession, NETCHAN_CORE) {
    12     
    12     
    13     // connect slots
    13     // connect slots
    14     slots.connect(netsession.sig_node_connected(), this, &NetworkServer::on_node_connected);
    14     slots.connect(netsession.sig_node_connected(), this, &NetworkServer::on_node_connected);
    15     
    15     
    16     // and then we listen
    16     // and then we listen
    37 
    37 
    38 /*
    38 /*
    39  * NetworkServerObject
    39  * NetworkServerObject
    40  */
    40  */
    41 NetworkServerObject::NetworkServerObject (NetworkServer &server) :
    41 NetworkServerObject::NetworkServerObject (NetworkServer &server) :
    42     NetworkObject_Server(server.netobjs), server(server)
    42     NetworkObject_Server(server.controller), server(server)
    43 {
    43 {
    44 
    44 
    45 }
    45 }
    46 
    46 
    47 /*
    47 /*
    96 
    96 
    97     // and carry out the actual dig on the server as well
    97     // and carry out the actual dig on the server as well
    98     Player::handleDig(position, radius);
    98     Player::handleDig(position, radius);
    99 }
    99 }
   100 
   100 
   101 void NetworkServerPlayer::handleCreateProjectile (Weapon *weapon, Vector position, Vector velocity) {
   101 void NetworkServerPlayer::handleFireWeapon (Weapon *weapon, Vector position, Vector velocity) {
   102     Engine::log(INFO, "server_player.create_projectile") << "weapon='" << weapon->getName() << "', position=" << position << ", velocity=" << velocity;
   102     Engine::log(INFO, "server_player.fire_weapon") << "weapon='" << weapon->getName() << "', position=" << position << ", velocity=" << velocity;
   103 
   103 
   104     // create new NetworkServerProjectile object
   104     // create new NetworkServerProjectile object
   105     new NetworkServerProjectile(server, this, position, velocity, weapon);
   105     new NetworkServerProjectile(server, this, position, velocity, weapon);
       
   106 
       
   107     // as handleFireWeapon does
       
   108     weaponFired(weapon);
   106 }
   109 }
   107 
   110 
   108 void NetworkServerPlayer::handleChangeWeapon (unsigned int weaponIndex) {
   111 void NetworkServerPlayer::handleChangeWeapon (unsigned int weaponIndex) {
   109     NetworkPacket pkt;
   112     NetworkPacket pkt;
   110 
   113 
   239 /* 
   242 /* 
   240  * NetworkServerProjectile
   243  * NetworkServerProjectile
   241  */
   244  */
   242 NetworkServerProjectile::NetworkServerProjectile (NetworkServer &server, NetworkServerPlayer *player, Vector position,
   245 NetworkServerProjectile::NetworkServerProjectile (NetworkServer &server, NetworkServerPlayer *player, Vector position,
   243         Vector velocity, Weapon *weapon) :
   246         Vector velocity, Weapon *weapon) :
   244     Projectile(server.state, position, velocity, weapon, true), NetworkServerObject(server)
   247     Projectile(player, position, velocity, weapon, true), NetworkServerObject(server)
   245 {
   248 {
   246     NetworkPacket pkt;
   249     NetworkPacket pkt;
   247 
   250     
       
   251     server.controller.write_object(pkt, player);
   248     pkt.write_vector(position);
   252     pkt.write_vector(position);
   249     pkt.write_vector(velocity);
   253     pkt.write_vector(velocity);
   250     pkt.write_float32(explosionRadius);
   254     pkt.write_uint8(weapon->getID());
   251     pkt.write_float32(radius);
   255 
   252 
   256     send_all(NETMSG_PROJECTILE_PLAYER_FIRED, pkt, true);
   253     send_all(NETMSG_PROJECTILE_CREATE, pkt, true);
       
   254 }
   257 }
   255 
   258 
   256 void NetworkServerProjectile::onDestroy (Vector position, bool removeGround) {
   259 void NetworkServerProjectile::onDestroy (Vector position, bool removeGround) {
   257     NetworkPacket pkt;
   260     NetworkPacket pkt;
   258 
   261 
   259     Engine::log(INFO, "server_projectile.destroy") << "position=" << position << ", removeGround=" << removeGround;
   262     Engine::log(INFO, "server_projectile.destroy") << "position=" << position << ", removeGround=" << removeGround;
   260 
   263     
   261     pkt.write_vector(position);
   264     pkt.write_vector(position);
   262     pkt.write_uint8(removeGround ? NETWORK_PROJECTILE_REMOVE_GROUND : 0);
   265     pkt.write_uint8(removeGround ? NETWORK_PROJECTILE_REMOVE_GROUND : 0);
   263 
   266 
   264     send_all(NETMSG_PROJECTILE_DESTROY, pkt, true);
   267     send_all(NETMSG_PROJECTILE_DESTROY, pkt, true);
   265 
   268