My Project
server.hpp
Go to the documentation of this file.
1#ifndef _SERVER_H
2#define _SERVER_H
3
4#include "game.hpp"
5#include "wordle-de.pb.h"
6#include <functional>
7#include <netinet/in.h>
8#include <unistd.h>
9#include <vector>
10
11#define INPUT_BUFFER_SIZE 1000
12
13class Server {
14public:
15 typedef std::function<void(uint16_t, char *)> receiveCallbackType;
16 typedef std::function<void(uint16_t)> newConnectionCallbackType;
17 typedef std::function<void(uint16_t)> disconnectCallbackType;
18
19private:
20 Server();
21 Server(const int &);
22 Server(const Server &) = delete;
23 virtual ~Server();
24
25public:
26 static void createInstance();
27 static void createInstance(const int &);
28 static void destroyInstance() { delete instance; }
29 static Server *getInstance() { return instance; }
30 void init();
31 void run();
32 void stop();
33
34 // callback setters
38
39 uint16_t sendMessage(int source_fd, const char *messageBuffer);
40 uint16_t sendMessage(int source_fd, char *messageBuffer);
41
42 void sendLoginAck(uint16_t fd, bool success, const char *errorMsg = "") {
43 auto ack = new wordle_de::LoginAck();
44 ack->set_loggedin(success);
45 ack->set_error(errorMsg);
46 auto msg = wordle_de::Message();
47 msg.set_allocated_loginack(ack);
48 sendMessage(fd, msg.SerializeAsString().c_str());
49 }
50 void sendGuessAck(uint16_t fd, const GameState::guessResultT &res) {
51 auto result = new wordle_de::GuessAck();
52 for (const auto &r : res) {
53 switch (r) {
55 result->add_result(
56 wordle_de::GuessAck_matchType::GuessAck_matchType_NO_MATCH);
57 break;
59 result->add_result(
60 wordle_de::GuessAck_matchType::GuessAck_matchType_MATCH);
61 break;
63 result->add_result(
64 wordle_de::GuessAck_matchType::GuessAck_matchType_EXACT_MATCH);
65 break;
66 }
67 }
68 auto msg = wordle_de::Message();
69 msg.set_allocated_guessack(result);
70 sendMessage(fd, msg.SerializeAsString().c_str());
71 }
72
73private:
74 // file descriptor sets
75 fd_set masterfds;
76 fd_set tmpfds;
77
78 // track the maximum fd value
79 uint16_t maxfd;
80
83
84 struct sockaddr_storage client_addr;
85 struct sockaddr_in server_addr;
86
88
89 char remote_ip[INET6_ADDRSTRLEN];
90
94
95 // function prototypes
96 void setup(int port);
97 void initializeSocket();
98 void bindSocket();
99 void startListen();
100 void handleNewConnection();
101 void recvInputFromExisting(int fd);
102
103private:
105};
106#endif // !_SERVER_H
std::array< matchType, WORD_LENGTH > guessResultT
Definition: game.hpp:15
@ MATCH
Definition: game.hpp:14
@ EXACT_MATCH
Definition: game.hpp:14
@ NO_MATCH
Definition: game.hpp:14
Definition: server.hpp:13
void stop()
Definition: server.cpp:66
void init()
Definition: server.cpp:128
char remote_ip[INET6_ADDRSTRLEN]
Definition: server.hpp:89
struct sockaddr_storage client_addr
Definition: server.hpp:84
void initializeSocket()
Definition: server.cpp:39
static void createInstance()
Definition: server.cpp:6
void onDisconnect(disconnectCallbackType cb)
Definition: server.cpp:140
void sendGuessAck(uint16_t fd, const GameState::guessResultT &res)
Definition: server.hpp:50
fd_set masterfds
Definition: server.hpp:75
void setup(int port)
Definition: server.cpp:23
void onConnect(newConnectionCallbackType cb)
Definition: server.cpp:136
virtual ~Server()
Definition: server.cpp:21
disconnectCallbackType disconnectCallback
Definition: server.hpp:93
void sendLoginAck(uint16_t fd, bool success, const char *errorMsg="")
Definition: server.hpp:42
static Server * instance
Definition: server.hpp:104
void recvInputFromExisting(int fd)
Definition: server.cpp:83
void handleNewConnection()
Definition: server.cpp:68
fd_set tmpfds
Definition: server.hpp:76
void bindSocket()
Definition: server.cpp:49
std::function< void(uint16_t)> disconnectCallbackType
Definition: server.hpp:17
int mastersocket_fd
Definition: server.hpp:81
std::function< void(uint16_t)> newConnectionCallbackType
Definition: server.hpp:16
struct sockaddr_in server_addr
Definition: server.hpp:85
uint16_t sendMessage(int source_fd, const char *messageBuffer)
Definition: server.cpp:148
void onInput(receiveCallbackType cb)
Definition: server.cpp:134
std::function< void(uint16_t, char *)> receiveCallbackType
Definition: server.hpp:15
Server(const Server &)=delete
void run()
Definition: server.cpp:105
static Server * getInstance()
Definition: server.hpp:29
void startListen()
Definition: server.cpp:59
char input_buffer[INPUT_BUFFER_SIZE]
Definition: server.hpp:87
Server()
Definition: server.cpp:17
int tempsocket_fd
Definition: server.hpp:82
receiveCallbackType receiveCallback
Definition: server.hpp:92
uint16_t maxfd
Definition: server.hpp:79
static void destroyInstance()
Definition: server.hpp:28
newConnectionCallbackType newConnectionCallback
Definition: server.hpp:91
#define INPUT_BUFFER_SIZE
Definition: server.hpp:11