summaryrefslogtreecommitdiff
path: root/src/server.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/server.c')
-rw-r--r--src/server.c34
1 files changed, 16 insertions, 18 deletions
diff --git a/src/server.c b/src/server.c
index 0addcf2..bcca3a9 100644
--- a/src/server.c
+++ b/src/server.c
@@ -103,7 +103,7 @@ void map_load_node(map *m, uint32_t x, uint32_t y, uint32_t color)
case 0xff9de2: n->type = N_VALLEY_FLOWER; break; // TODO: color
case 0x016300: n->type = N_BIG_TREE; break;
default:
- fprintf(stderr, "invalid color in map %*s at %"PRIu32" %"PRIu32": %06x\n",
+ fprintf(stderr, "invalid color in map %.*s at %"PRIu32" %"PRIu32": %06x\n",
PSTR(m->name), x, y, color);
n->present = false;
break;
@@ -195,8 +195,8 @@ void ser_node(strbuf *w, node *n)
void send_players(game *g)
{
for (size_t i = 0; i < g->players.len; i++) {
- player *p = &g->players.data[i];
- if (p->auth) SEND_PKT(p->conn, CPKT_PLAYERS,
+ player *to = &g->players.data[i];
+ if (to->auth) SEND_PKT(to->conn, CPKT_PLAYERS,
ser_u16(&pkt, g->players.len);
for (size_t i = 0; i < g->players.len; i++) {
player *p = &g->players.data[i];
@@ -264,7 +264,7 @@ bool handle_hi(str pkt, player *p, game *g)
return false;
if (str_cmp(g->passphrase, pass) != 0) {
- printf("wrong passphrase from %*s\n", PSTR(name)); // TODO: log ip ?
+ printf("wrong passphrase from %.*s\n", PSTR(name)); // TODO: log ip ?
SEND_PKT(p->conn, CPKT_FAIL, ser_fail_reason(&pkt, FAIL_WRONG_PASS);)
return true; // valid pkt, but invalid passphrase
}
@@ -277,7 +277,7 @@ bool handle_hi(str pkt, player *p, game *g)
}
}
- printf("player authenticated as %*s\n", PSTR(name));
+ printf("player authenticated as %.*s\n", PSTR(name));
p->auth = true;
p->name = str_clone(name);
@@ -342,16 +342,8 @@ int main()
for (;;) {
struct pollfd fds[g.players.len + 1];
- for (size_t i = 0; i < g.players.len;) {
- player *p = &g.players.data[i];
- if (p->conn.disco) {
- printf("player %*s disconnected\n", PSTR(p->name));
- player_remove(p, &g);
- continue;
- }
-
- fds[i++] = peer_prepare(&p->conn);
- }
+ for (size_t i = 0; i < g.players.len; i++)
+ fds[i] = peer_prepare(&g.players.data[i].conn);
fds[g.players.len].fd = g.accept_fd;
fds[g.players.len].events = POLLIN;
@@ -370,9 +362,13 @@ int main()
player *p = &g.players.data[i];
str pkt = peer_recv(&p->conn, fds[i]);
- if (p->conn.disco || pkt.len == 0)
- continue;
- if (!handle_pkt(pkt, p, &g))
+ if (p->conn.disco) {
+ printf("player %.*s disconnected\n", PSTR(p->name));
+ player_remove(p, &g);
+ goto cont;
+ }
+
+ if (pkt.len > 0 && !handle_pkt(pkt, p, &g))
invalid_pkt(&p->conn, pkt);
}
@@ -388,5 +384,7 @@ int main()
p->name = S("(unauthenticated)");
peer_init(&p->conn, socket, &p->name);
}
+
+ cont: continue;
}
}