diff --git a/server.c b/server.c
index e60ac264fdffb1ac32881cf4bd0812542baba512..38c6790f9ba58a05819bd7f702ccd08baeb49e15 100644 (file)
--- a/server.c
+++ b/server.c
g_player_does(id, m.cl.does.code);
}
g_player_does(id, m.cl.does.code);
}
-static void sv_register_player(IPaddress address, ProtocolMessage m) {
- if(m.cl.info.version != PROTOCOL_VERSION)
- SendMessage(sock, address, sv_kill("Uncompatible version"));
+static void sv_kill_address(IPaddress address, const char * msg) {
+ SDL_Log("sv_kill_address: %s", msg);
+ SendMessage(sock, address, sv_kill(msg));
+}
+
+static void sv_register_player(IPaddress address, ClInfo info) {
+ if(info.version != PROTOCOL_VERSION) {
+ sv_kill_address(address, "Uncompatible version");
+ return;
+ }
int i = 0;
while((i < clientlimit) && (client[i].connected))
++i;
int i = 0;
while((i < clientlimit) && (client[i].connected))
++i;
- int namesize = sizeof(m.cl.info.name);
if(i >= clientlimit) {
if(i >= clientlimit) {
- SDL_Log("Too may clints, player %.*s disconnected", namesize, m.cl.info.name);
- SendMessage(sock, address, sv_kill("Too many clients"));
+ sv_kill_address(address, "Too many clients");
return;
}
client[i].connected = true;
client[i].address = address;
return;
}
client[i].connected = true;
client[i].address = address;
- strncpy(client[i].name, (char*) m.cl.info.name, MAX_NAMESIZE);
+ strncpy(client[i].name, (char*) info.name, MAX_NAMESIZE);
client[i].name[MAX_NAMESIZE - 1] = 0;
SDL_Log("Player %s (%i) connected", client[i].name, i);
client[i].name[MAX_NAMESIZE - 1] = 0;
SDL_Log("Player %s (%i) connected", client[i].name, i);
sv_sync_client(i, true);
}
sv_sync_client(i, true);
}
+static void sv_recv_ipmsg(IPaddress address, ProtocolMessage m) {
+ int id = sv_find_client(address);
+ if(id < 0 && m.type != CL_INFO)
+ return;
+
+ switch(m.type) {
+ case CL_INFO: sv_register_player(address, m.cl.info); break;
+ case CL_KILL: sv_kill_player(id, false, ""); break;
+ case CL_DOES: sv_move_player(id, m); break;
+ default: sv_kill_address(address, "Invalid message");
+ }
+}
+
static void sv_recv() {
IPaddress address;
ProtocolMessage m;
static void sv_recv() {
IPaddress address;
ProtocolMessage m;
- while(RecvMessage(sock, &address, &m)) {
- switch(m.type) {
- case CL_INFO: sv_register_player(address, m); break;
- case CL_KILL: sv_kill_player(sv_find_client(address), false, ""); break;
- case CL_DOES: sv_move_player(sv_find_client(address), m); break;
- default: SDL_Log("invalid message %i", m.type);
- }
- }
+ while(RecvMessage(sock, &address, &m))
+ sv_recv_ipmsg(address, m);
}
static void sv_send() {
}
static void sv_send() {