summaryrefslogtreecommitdiffstats
path: root/src/server/ChatServer.hpp
diff options
context:
space:
mode:
authorJoursoir <chat@joursoir.net>2020-12-02 12:46:42 +0000
committerJoursoir <chat@joursoir.net>2020-12-02 12:46:42 +0000
commitad0a2dc909fbb772d42ab6faf13bba74fbc2483d (patch)
tree22e71f968850b7862331040f035c1125fdb44880 /src/server/ChatServer.hpp
parenta6b8d6e475700efcb7ae1f7cdb7afeb2027fd4b7 (diff)
downloadwant-chat-ad0a2dc909fbb772d42ab6faf13bba74fbc2483d.tar.gz
want-chat-ad0a2dc909fbb772d42ab6faf13bba74fbc2483d.tar.bz2
want-chat-ad0a2dc909fbb772d42ab6faf13bba74fbc2483d.zip
try to make the code is easier; start work with db
Diffstat (limited to 'src/server/ChatServer.hpp')
-rw-r--r--src/server/ChatServer.hpp63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/server/ChatServer.hpp b/src/server/ChatServer.hpp
new file mode 100644
index 0000000..e2ef154
--- /dev/null
+++ b/src/server/ChatServer.hpp
@@ -0,0 +1,63 @@
+#ifndef WC_CHATSERVER_H
+#define WC_CHATSERVER_H
+
+#include "sockets.hpp"
+#include "database.hpp"
+#include "../const_vars.hpp"
+
+#define CONSOLE_LOG(f_, ...) printf((f_), ##__VA_ARGS__)
+
+enum handle_room_enter {
+ enter_noexist,
+ enter_private,
+ enter_uncorrect_pass,
+ enter_success
+};
+
+class ChatRoom;
+class UserInfo;
+
+class ChatServer : public FdHandler {
+ EventSelector *the_selector;
+ DatabaseManager *dbase;
+
+ ChatRoom **room;
+ int room_len;
+ ChatRoom *lobby;
+
+ ChatServer(EventSelector *sel, DatabaseManager *db, int fd);
+public:
+ ~ChatServer();
+ static ChatServer *Start(EventSelector *sel,
+ DatabaseManager *db, int fd);
+
+ int AddRoom(char *password);
+ bool DeleteRoom(int id); // call only if room is empty
+ bool RoomExist(int id) const;
+
+ void GotoLobby(ChatRoom *cur_room, UserInfo *u);
+ handle_room_enter ChangeSessionRoom(ChatRoom *cur_room,
+ UserInfo *u, int id, char *pass);
+
+ void CloseConnection(UserInfo *u);
+
+ // work with database:
+ AnswerDB *QuerySelect(const char *sql)
+ { return dbase->QuerySelect(sql); }
+
+private:
+ virtual void Handle(bool r, bool w);
+};
+
+/*class StorageOfUsers {
+ struct item {
+ ChatSession *s;
+ item *next;
+ }
+ item *first;
+public:
+ AddSession(ChatSession *s);
+ RemoveSession(ChatSession *s);
+};*/
+
+#endif \ No newline at end of file