src/Network/Server.cc
changeset 435 7bad24ab668e
parent 434 a8ba81432ddd
child 436 49f94c4bdf0d
equal deleted inserted replaced
434:a8ba81432ddd 435:7bad24ab668e
   108         NetworkServerPlayer *player = *it;
   108         NetworkServerPlayer *player = *it;
   109 
   109 
   110         // player is not in players list yet
   110         // player is not in players list yet
   111         assert(player != this);
   111         assert(player != this);
   112         
   112         
   113         // we send a NETMSG_PLAYER_INFO message for the player object
   113         // send info
   114         NetworkMessage player_msg(*player, NETMSG_PLAYER_INFO);
   114         player->send_info(node);
   115        
       
   116         // write packet
       
   117         player_msg.write_vector(player->getPosition());
       
   118         
       
   119         // send message to client
       
   120         node.send(player_msg);
       
   121 
       
   122         // XXX: send rope info...
       
   123     }
   115     }
   124 
   116 
   125     // sync projectiles
   117     // sync projectiles
   126     for (std::list<Projectile*>::iterator it = server.state.projectiles.begin(); it != server.state.projectiles.end(); it++) {
   118     for (std::list<Projectile*>::iterator it = server.state.projectiles.begin(); it != server.state.projectiles.end(); it++) {
   127         NetworkServerProjectile *proj = dynamic_cast<NetworkServerProjectile*>(*it);
   119         NetworkServerProjectile *proj = dynamic_cast<NetworkServerProjectile*>(*it);
   196     Player::handleChangeWeapon(weaponIndex);
   188     Player::handleChangeWeapon(weaponIndex);
   197 }
   189 }
   198         
   190         
   199 void NetworkServerPlayer::handleRopeState (RopeState state) {
   191 void NetworkServerPlayer::handleRopeState (RopeState state) {
   200     Engine::log(DEBUG, "server_player.rope_state") << "state=" << rope.getState() << ", position=" << rope.getPosition() << ", velocity=" << rope.getVelocity() << ", length=" << rope.getLength() << ", pivotPlayer=" << rope.getPivotPlayer();
   192     Engine::log(DEBUG, "server_player.rope_state") << "state=" << rope.getState() << ", position=" << rope.getPosition() << ", velocity=" << rope.getVelocity() << ", length=" << rope.getLength() << ", pivotPlayer=" << rope.getPivotPlayer();
   201 
   193     
       
   194     // the NetworkGroup to send to
       
   195     NetworkGroup all = server.netsession.all_nodes();
       
   196     
       
   197     // send new rope state
       
   198     send_rope_state(all, state);
       
   199 }
       
   200         
       
   201 void NetworkServerPlayer::handleRopeLength (float length) {
       
   202     NetworkMessage msg(*this, NETMSG_PLAYER_ROPE_LENGTH);
       
   203     
       
   204     // write packet
       
   205     msg.write_float32(length);
       
   206         
       
   207     // send packet
       
   208     server.netsession.all_nodes().send(msg);
       
   209 }
       
   210 
       
   211 void NetworkServerPlayer::spawn (Vector position) {
       
   212     NetworkMessage msg(*this, NETMSG_PLAYER_SPAWN);
       
   213     
       
   214     // write packet
       
   215     msg.write_vector(position);
       
   216 
       
   217     Engine::log(DEBUG, "server_player.spawn") << this << ": position=" << position;
       
   218     
       
   219     // send packet
       
   220     server.netsession.all_nodes().send(msg);
       
   221     
       
   222     // super
       
   223     Player::spawn(position);
       
   224 }
       
   225         
       
   226 void NetworkServerPlayer::die (bool start_timer) {
       
   227     NetworkMessage msg(*this, NETMSG_PLAYER_DIE);
       
   228 
       
   229     Engine::log(DEBUG, "server_player.die") << this;
       
   230     
       
   231     // send packet
       
   232     server.netsession.all_nodes().send(msg);
       
   233 
       
   234     // super
       
   235     Player::die(start_timer);
       
   236 }
       
   237 
       
   238 void NetworkServerPlayer::send_info (NetworkNode &node) {
       
   239     // we send a NETMSG_PLAYER_INFO message for the player object
       
   240     NetworkMessage player_msg(*this, NETMSG_PLAYER_INFO);
       
   241    
       
   242     // write packet
       
   243     player_msg.write_vector(getPosition());
       
   244     
       
   245     // send message to client
       
   246     node.send(player_msg);
       
   247     
       
   248     // then send rope state, unless folded
       
   249     if (rope.getState() != ROPE_FOLDED)
       
   250         send_rope_state(node, rope.getState());
       
   251 }
       
   252 
       
   253 void NetworkServerPlayer::send_rope_state (NetworkTarget &target, RopeState state) {
   202     switch (state) {
   254     switch (state) {
   203     case ROPE_FLYING: {
   255     case ROPE_FLYING: {
   204         NetworkMessage msg(*this, NETMSG_PLAYER_ROPE_THROW);
   256         NetworkMessage msg(*this, NETMSG_PLAYER_ROPE_THROW);
   205 
   257 
   206         msg.write_vector(rope.getPosition());
   258         msg.write_vector(rope.getPosition());
   207         msg.write_vector(rope.getVelocity());
   259         msg.write_vector(rope.getVelocity());
   208         msg.write_float32(rope.getLength());
   260         msg.write_float32(rope.getLength());
   209         
   261         
   210         server.netsession.all_nodes().send(msg);
   262         target.send(msg);
   211        
   263        
   212         } break;
   264         } break;
   213 
   265 
   214     case ROPE_FIXED: {
   266     case ROPE_FIXED: {
   215         NetworkMessage msg(*this, NETMSG_PLAYER_ROPE_FIXED);
   267         NetworkMessage msg(*this, NETMSG_PLAYER_ROPE_FIXED);
   222         
   274         
   223         msg.write_vector(rope.getPosition());
   275         msg.write_vector(rope.getPosition());
   224         msg.write_float32(rope.getLength());
   276         msg.write_float32(rope.getLength());
   225         msg.write_object(player);    // may be NULL
   277         msg.write_object(player);    // may be NULL
   226         
   278         
   227         server.netsession.all_nodes().send(msg);
   279         target.send(msg);
   228 
   280 
   229         } break;
   281         } break;
   230     
   282     
   231     case ROPE_FOLDED: {
   283     case ROPE_FOLDED: {
   232         NetworkMessage msg(*this, NETMSG_PLAYER_ROPE_RELEASED);
   284         NetworkMessage msg(*this, NETMSG_PLAYER_ROPE_RELEASED);
   233 
   285 
   234         server.netsession.all_nodes().send(msg);
   286         target.send(msg);
   235 
   287 
   236         } break;
   288         } break;
   237     }
   289     }
   238 }
       
   239         
       
   240 void NetworkServerPlayer::handleRopeLength (float length) {
       
   241     NetworkMessage msg(*this, NETMSG_PLAYER_ROPE_LENGTH);
       
   242     
       
   243     // write packet
       
   244     msg.write_float32(length);
       
   245         
       
   246     // send packet
       
   247     server.netsession.all_nodes().send(msg);
       
   248 }
       
   249 
       
   250 void NetworkServerPlayer::spawn (Vector position) {
       
   251     NetworkMessage msg(*this, NETMSG_PLAYER_SPAWN);
       
   252     
       
   253     // write packet
       
   254     msg.write_vector(position);
       
   255 
       
   256     Engine::log(DEBUG, "server_player.spawn") << this << ": position=" << position;
       
   257     
       
   258     // send packet
       
   259     server.netsession.all_nodes().send(msg);
       
   260     
       
   261     // super
       
   262     Player::spawn(position);
       
   263 }
       
   264         
       
   265 void NetworkServerPlayer::die (bool start_timer) {
       
   266     NetworkMessage msg(*this, NETMSG_PLAYER_DIE);
       
   267 
       
   268     Engine::log(DEBUG, "server_player.die") << this;
       
   269     
       
   270     // send packet
       
   271     server.netsession.all_nodes().send(msg);
       
   272 
       
   273     // super
       
   274     Player::die(start_timer);
       
   275 }
   290 }
   276 
   291 
   277 void NetworkServerPlayer::on_disconnected (void) {
   292 void NetworkServerPlayer::on_disconnected (void) {
   278     NetworkMessage msg(*this, NETMSG_PLAYER_QUIT);
   293     NetworkMessage msg(*this, NETMSG_PLAYER_QUIT);
   279     
   294