Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2008-02-21 19:06:15 +0000
committerStijn Buys <ingar@osirion.org>2008-02-21 19:06:15 +0000
commit8aa04fc836116a58f8ffd1e0c3539b9ea8a94ddf (patch)
treebb933edb3919ed67d05b098a6b97a73f01746762 /src/core/netserver.cc
parent41ad1e4c9e2a70d0a8811f4b035f0d3018045e61 (diff)
dedicated server, entity transfer
Diffstat (limited to 'src/core/netserver.cc')
-rw-r--r--src/core/netserver.cc46
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) {