diff options
author | Stijn Buys <ingar@osirion.org> | 2008-02-21 19:06:15 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2008-02-21 19:06:15 +0000 |
commit | 8aa04fc836116a58f8ffd1e0c3539b9ea8a94ddf (patch) | |
tree | bb933edb3919ed67d05b098a6b97a73f01746762 /src/core/netserver.cc | |
parent | 41ad1e4c9e2a70d0a8811f4b035f0d3018045e61 (diff) |
dedicated server, entity transfer
Diffstat (limited to 'src/core/netserver.cc')
-rw-r--r-- | src/core/netserver.cc | 46 |
1 files changed, 45 insertions, 1 deletions
diff --git a/src/core/netserver.cc b/src/core/netserver.cc index 3473e6a..43067d7 100644 --- a/src/core/netserver.cc +++ b/src/core/netserver.cc @@ -58,6 +58,29 @@ void NetServer::client_connect(int const clientfd, std::string const host, int c con_print << client->host() << ":" << client->port() << " connected.\n"; + std::ostringstream netmsg; + + // send entities + std::map<unsigned int, Entity *>::iterator it; + for (it=Entity::registry.begin(); it != Entity::registry.end(); it++) { + netmsg.str(""); + switch ((*it).second->type()) { + case Entity::Default: + case Entity::Dynamic: + case Entity::Controlable: + netmsg << "ent "; + (*it).second->serialize(netmsg); + netmsg << "\n"; + client->send(netmsg.str()); + break; + default: + break; + } + } + + // mark player as dirty + client->player()->player_dirty = true; + // notify the game server server()->player_connect(client->player()); @@ -169,6 +192,9 @@ NetClient *NetServer::find_client(Player const *player) */ void NetServer::parse_incoming_message(NetClient *client, const std::string & message) { + if (!message.size()) + return; + std::stringstream msgstream(message); std::string command; @@ -189,6 +215,24 @@ void NetServer::parse_incoming_message(NetClient *client, const std::string & me return; } + // cup - client update entity + if (command == "cup") { + //con_debug << message << "\n"; + unsigned int id; + if (msgstream >> id) { + Entity *entity = Entity::find(id); + if (!entity) { + con_warn << client->host() << ":" << client->port() << " update for unknown entity " << id << "\n"; + + } else { + entity->entity_dirty = true; + entity->recieve_client_update(msgstream); + } + + } + return; + } + // say if (command == "say") { if (message.size() > command.size()+1) { @@ -200,7 +244,7 @@ void NetServer::parse_incoming_message(NetClient *client, const std::string & me return; } - // name is an alias for set name + // name if (command == "name") { std::string name; if (msgstream >> name) { |