#include #define _GNU_SOURCE #include "data.h" #include "login.h" #include "server.h" #include #include #include #include void handle_player(int conn_fd) { playerc_t plrc = {0}; plrc.state = LoggedOut; plrc.conn = conn_fd; player_t plr = {0}; plrc.plr = plr; int err = step_login(&plrc, conn_fd); if (err) { err = send_to_fd(conn_fd, "Error in login process, exiting"); if (err) { printf("Could not send error message"); } close(conn_fd); return; } close(conn_fd); } int step_login(playerc_t *player, int conn_fd) { int err = 0; for (;;) { switch (player->state) { case LoggedOut: /* the player has yet to log in, this is a fresh connection! */ send_to_fd(player->conn, "Welcome! Please enter your **username** below\n"); char *buf = (char *)malloc(1 << 10); recv(player->conn, buf, sizeof(buf), 0); err = try_load_file(buf); if (err) { // File doesn't exist, let's create a player! strcpy(player->plr.name, buf); send_to_fd(player->conn, "Howdy! Want to introduce yourself? [y|n]\n"); recv(player->conn, buf, sizeof(buf), 0); if (buf[0] == 'y') { player->state = WantMakeAccount; } else if (buf[0] == 'n') { send_to_fd(player->conn, "Awww :(. Oh well, hope to see you again soon!\n"); return 4; } continue; } else { player->state = EnterPassword; continue; } case WantMakeAccount: asprintf(&buf, "Welcome aboard %s! Why don't you start us off by giving me a " "password.\n", ) send_to_fd(player->conn, "Welcome aboard! ") } } return err; }