Libftpp
A modern C++ library
server.hpp
Go to the documentation of this file.
1 #ifndef SERVER_HPP
2 #define SERVER_HPP
3 
4 #include <arpa/inet.h>
5 #include <netinet/in.h>
6 #include <sys/socket.h>
7 #include <sys/types.h>
8 #include <unistd.h>
9 
10 #include <cstddef>
11 #include <functional>
12 #include <stdexcept>
13 #include <unordered_map>
14 
15 #define NB_CONNECTION 1000
16 #define READ_BUFFER_SIZE 4096
17 
18 #include "../message/message.hpp"
19 
61 class Server
62 {
63 private:
64  int _socket = -1;
65  int _max_fd = -1;
66  int _next_id = 0;
67  bool _running = true;
68  std::string _address;
69  size_t _port;
70 
71  fd_set _active;
72  fd_set _readyRead;
73 
74  std::unordered_map<int, long long> _clients;
75  std::unordered_map<long long, int> _clientsToFd;
76  std::unordered_map<Message::Type, std::function<void(long long& clientID, const Message& msg)>>
77  _tasks;
78 
79  std::vector<Message> _msgs;
80  std::unordered_map<int, Message> _partialMsgs;
81 
82  void _acceptNewConnection();
83  bool _receiveClientMsg(const int& fd);
84 
85  void _clearAll();
86  void _clearClient(int& fd);
87 
88 public:
89  Server();
90  ~Server();
91  Server(const std::string& address, size_t port);
92  void start(const size_t& port = 0);
93 
94  void defineAction(const Message::Type& messageType,
95  const std::function<void(long long& clientID, const Message& msg)>& action);
96 
97  void sendTo(const Message& message, long long clientID);
98  void sendToArray(const Message& message, std::vector<long long> clientIDs);
99  void sendToAll(const Message& message);
100 
101  void update();
102  void stop();
103 };
104 #endif
Class representing a structured message for network communication.
Definition: message.hpp:47
int Type
Definition: message.hpp:49
Basic TCP server class using POSIX sockets and select() for multi-client communication.
Definition: server.hpp:62
void stop()
Definition: server.cpp:259
~Server()
Definition: server.cpp:5
void sendTo(const Message &message, long long clientID)
Definition: server.cpp:125
void sendToArray(const Message &message, std::vector< long long > clientIDs)
Definition: server.cpp:146
Server()
Definition: server.cpp:3
void defineAction(const Message::Type &messageType, const std::function< void(long long &clientID, const Message &msg)> &action)
Definition: server.cpp:163
void sendToAll(const Message &message)
Definition: server.cpp:154
void start(const size_t &port=0)
Definition: server.cpp:12
void update()
Definition: server.cpp:170