aboutsummaryrefslogtreecommitdiff
path: root/src/login.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/login.c')
-rw-r--r--src/login.c68
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;
+}