コード例 #1
0
ファイル: login.c プロジェクト: gefla/empserver
static int
play_cmd(void)
{
    struct player *other;
    natid cnum;
    struct natstr *natp;
    char **ap;
    char buf[128];

    ap = player->argp;
    if (*++ap) {
        strncpy(player->userid, *ap, sizeof(player->userid) - 1);
        player->userid[sizeof(player->userid) - 1] = '\0';
        player->authenticated = 0;
    }
    if (*++ap) {
        if (natbyname(*ap, &cnum) < 0) {
            pr_id(player, C_CMDERR, "country %s does not exist\n", *ap);
            return RET_FAIL;
        }
    }
    if (*++ap) {
        if (!natpass(cnum, *ap)) {
            pr_id(player, C_CMDERR, "password bad, logging entry\n");
            logerror("%s tried country #%d with %s",
                     praddr(player), cnum, *ap);
            return RET_FAIL;
        }
        player->cnum = cnum;
        player->authenticated = 1;
    }
    if (!may_play())
        return RET_FAIL;
    other = getplayer(player->cnum);
    if (other) {
        natp = getnatp(player->cnum);
        if (natp->nat_stat != STAT_VIS) {
            pr_id(player, C_EXIT, "country in use by %s\n", praddr(other));
        } else {
            pr_id(player, C_EXIT, "country in use\n");
        }
        return RET_FAIL;
    }
    snprintf(buf, sizeof(buf), "Play#%d", player->cnum);
    logerror("%s logged in as country #%d", praddr(player), player->cnum);
    journal_login();
    empth_set_name(empth_self(), buf);
    pr_id(player, C_INIT, "%d\n", CLIENTPROTO);
    empth_rwlock_rdlock(shutdown_lock);
    player->state = PS_PLAYING;
    player_main(player);
    journal_logout();
    logerror("%s logged out, country #%d", praddr(player), player->cnum);
    if (!io_eof(player->iop) && !io_error(player->iop))
        io_set_eof(player->iop);
    return RET_OK;
}
コード例 #2
0
ファイル: glue_main.c プロジェクト: joewan/NeoEditor
int main(int argc, char* argv[])
{
	return player_main(argc, argv);
}