diff options
Diffstat (limited to 'src/login.c')
-rw-r--r-- | src/login.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/login.c b/src/login.c new file mode 100644 index 0000000..c6ab408 --- /dev/null +++ b/src/login.c @@ -0,0 +1,68 @@ +#include <string.h> +#define _GNU_SOURCE +#include "data.h" +#include "login.h" +#include "server.h" +#include <stdio.h> +#include <stdlib.h> +#include <sys/socket.h> +#include <unistd.h> + +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; +} |