summaryrefslogtreecommitdiffstats
path: root/src/server/UserInfo.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/UserInfo.hpp')
-rw-r--r--src/server/UserInfo.hpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/server/UserInfo.hpp b/src/server/UserInfo.hpp
new file mode 100644
index 0000000..e033b0c
--- /dev/null
+++ b/src/server/UserInfo.hpp
@@ -0,0 +1,55 @@
+#ifndef WC_USER_H
+#define WC_USER_H
+
+#include <string.h>
+
+#include "sockets.hpp"
+#include "ChatRoom.hpp"
+#include "../const_vars.hpp"
+
+class ChatServer;
+
+enum enum_status {
+ wait_name, // expecting a username from player
+ wait_reg, // expecting registration
+ wait_log, // expecting login
+ no_wait
+};
+
+#define CONSOLE_LOG(f_, ...) printf((f_), ##__VA_ARGS__) // delete later
+
+class UserInfo : FdHandler {
+ friend class ChatServer;
+
+ char name[max_name_len];
+ char buffer[max_msg_len];
+ int buf_used;
+ bool ignoring;
+
+ enum_status state;
+ ChatRoom *the_master;
+
+ UserInfo(ChatRoom *i_master, int i_fd) : FdHandler(i_fd),
+ buf_used(0), ignoring(false), state(wait_name),
+ the_master(i_master) {}
+ ~UserInfo() {}
+
+ void SetRoom(ChatRoom *new_master);
+
+ // === realization in UserInfo_io.cpp ===
+ virtual void Handle(bool r, bool w); // w disabled, only read
+ void ReadAndIgnore();
+ void ReadAndCheck();
+ void CheckLines();
+public:
+ void Send(const char *msg, const int spec_msg = system_msg);
+ // === realization in UserInfo_io.cpp ===
+
+ const char *GetName() const;
+ void SetName(const char *n_name);
+
+ enum_status GetStatus() const { return state; }
+ void SetStatus(const enum_status e_s);
+};
+
+#endif \ No newline at end of file