Libftpp
A modern C++ library
client.hpp
Go to the documentation of this file.
1 #ifndef CLIENT_HPP
2 #define CLIENT_HPP
3 
4 #include <arpa/inet.h>
5 #include <netdb.h>
6 #include <netinet/in.h>
7 #include <string.h>
8 #include <sys/socket.h>
9 #include <sys/types.h>
10 #include <unistd.h>
11 
12 #include <cstddef>
13 #include <functional>
14 #include <string>
15 #include <unordered_map>
16 
17 #define MAX_READ_BUFFER 16000
18 
19 #include "../message/message.hpp"
20 
62 class Client
63 {
64 private:
65  std::vector<Message> _msgs;
66  std::unordered_map<Message::Type, std::vector<std::function<void(const Message& msg)>>>
67  _triggers;
68 
69  Message _tmpMsg;
70  int _fd;
71 
72  fd_set _readyRead;
73 
74  void _networkError(std::string&& errorMessage);
75  void _receiveMessage();
76  bool _isConnected() const;
77 
78 public:
79  Client();
80  Client(const std::string& address, const size_t& port);
81 
82  void connect(const std::string& address, const size_t& port);
83  void disconnect();
84 
85  void defineAction(const Message::Type& messageType,
86  const std::function<void(const Message& msg)>& action);
87 
88  void send(const Message& message);
89 
90  void update();
91 };
92 
93 #endif
Basic TCP client class using POSIX sockets and select() for network communication.
Definition: client.hpp:63
void connect(const std::string &address, const size_t &port)
Definition: client.cpp:18
void send(const Message &message)
Definition: client.cpp:59
void update()
Definition: client.cpp:127
void disconnect()
Definition: client.cpp:43
void defineAction(const Message::Type &messageType, const std::function< void(const Message &msg)> &action)
Definition: client.cpp:53
Client()
Definition: client.cpp:3
Class representing a structured message for network communication.
Definition: message.hpp:47
int Type
Definition: message.hpp:49