]> git.pond.sub.org Git - empserver/commitdiff
Clean up how quit and server shutdown trigger connection close
authorMarkus Armbruster <armbru@pond.sub.org>
Sun, 29 Jan 2012 09:44:28 +0000 (10:44 +0100)
committerMarkus Armbruster <armbru@pond.sub.org>
Tue, 21 Feb 2012 17:11:13 +0000 (18:11 +0100)
Simply set the player connection's EOF indicator.  Cleaner than
setting player->state to PS_SHUTDOWN from random places.

Move the assignment of PS_PLAYING from player_main() to its caller
play_cmd(), so that player->state is exclusively controlled in
login.c.

src/lib/player/login.c
src/lib/player/player.c
src/server/main.c

index d6a2b5424c99dc9e360499ac883aaa90f18f2b21..fc002149dfbecface3bf4e023222a71e31c4553f 100644 (file)
@@ -86,7 +86,7 @@ player_login(void *ud)
 
     pr_id(player, C_INIT, "Empire server ready\n");
 
-    while (player->state != PS_SHUTDOWN) {
+    for (;;) {
        io_output(player->iop, 1);
        if (io_gets(player->iop, buf, sizeof(buf)) < 0) {
            res = io_input(player->iop, 1);
@@ -355,9 +355,11 @@ play_cmd(void)
     empth_set_name(empth_self(), buf);
     logerror("%s logged in as country #%d", praddr(player), player->cnum);
     pr_id(player, C_INIT, "%d\n", CLIENTPROTO);
+    player->state = PS_PLAYING;
     player_main(player);
     logerror("%s logged out, country #%d", praddr(player), player->cnum);
-    player->state = PS_SHUTDOWN;
+    if (CANT_HAPPEN(!io_eof(player->iop)))
+       io_set_eof(player->iop);
     return RET_OK;
 }
 
index 647cb51516f239ba3289e248276b3533310f48fb..35b1ca09179e33c58998c373d967c6062aac298b 100644 (file)
@@ -59,7 +59,6 @@ player_main(struct player *p)
     struct natstr *natp;
     char buf[128];
 
-    p->state = PS_PLAYING;
     player = p;
     time(&player->curup);
     update_timeused_login(player->curup);
@@ -174,7 +173,6 @@ status(void)
     time(&player->curup);
     update_timeused(player->curup);
     if (io_error(player->iop) || io_eof(player->iop)
-       || player->state == PS_SHUTDOWN
        || !may_play_now(natp, player->curup))
        return 0;
 
@@ -284,7 +282,7 @@ show_motd(void)
 int
 quit(void)
 {
-    player->state = PS_SHUTDOWN;
+    io_set_eof(player->iop);
     return RET_OK;
 }
 
index 22ef0b2e86ac5129d972074b6756b722979091be..becfeb34ae1ae10d9e29177ac084ce1ed417a6f7 100644 (file)
@@ -419,9 +419,9 @@ shutdwn(int sig)
        if (p->state != PS_PLAYING)
            continue;
        pr_flash(p, "Server shutting down...\n");
-       p->state = PS_SHUTDOWN;
+       io_set_eof(p->iop);
+       p->aborted = 1;
        p->may_sleep = PLAYER_SLEEP_NEVER;
-       p->aborted++;
        if (p->command) {
            pr_flash(p, "Shutdown aborting command\n");
        }