diff options
author | Cara Salter <cara@devcara.com> | 2022-01-20 23:47:53 -0500 |
---|---|---|
committer | Cara Salter <cara@devcara.com> | 2022-01-20 23:47:53 -0500 |
commit | c2352ee043546b518f69c615a1ece778e942e650 (patch) | |
tree | 6efe18199f0fe2810c879c9251db2897a3244604 /src/login.c | |
download | cmud-c2352ee043546b518f69c615a1ece778e942e650.tar.gz cmud-c2352ee043546b518f69c615a1ece778e942e650.zip |
initial commit
yay start of a state machine and also learning sockets
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; +} |