Socket Server
socket_listener.h
Go to the documentation of this file.
1 #ifndef __SOCKET_LISTENER_H__
2 #define __SOCKET_LISTENER_H__
3 
4 // Project libraries
5 #include "send_interface.h"
6 #include "types.h"
7 
8 // System libraries
9 #include <sys/socket.h>
10 
11 // C++ Libraries
12 #include <atomic>
13 #include <condition_variable>
14 #include <functional>
15 #include <iostream>
16 #include <memory>
17 #include <mutex>
18 #include <queue>
19 #include <string>
20 #include <thread>
21 #include <vector>
22 
23 class SocketListener : public SendInterface {
24  public:
26  public:
27  MessageHandler(std::function<void()> cb) : m_cb(cb) {}
28 
29  void operator()() { m_cb(); }
30 
31  private:
32  std::function<void()> m_cb;
33  };
34  // constructor
35  SocketListener(std::string ipAddress, int port);
36 
37  // destructor
39 
45  virtual void sendMessage(int client_socket_fd,
46  std::shared_ptr<char[]> buffer) override;
47 
48  MessageHandler createMessageHandler(std::function<void()> cb);
52  bool init();
53 
57  void run();
58 
62  void cleanup();
63 
64  // virtual void setMessageHandler(MessageHandler message_handler) override;
65 
66  private:
67  // private methods
68  int createSocket();
69 
70  int waitForConnection(int listening);
71 
72  void loop_check();
73 
74  void done();
75 
76  void handle_loop();
77 
78  void detachThreads();
79 
80  void push_to_queue(std::function<void()> fn);
81 
82  void handle_client_socket(int client_socket_fd,
83  SocketListener::MessageHandler message_handler,
84  std::shared_ptr<char[]> buf);
85 
86  // private members
87  std::string m_ip_address;
88  int m_port;
89  std::thread m_loop_thread;
90  std::queue<std::function<void()>> task_queue;
91  std::mutex m_mutex_lock;
92  std::condition_variable pool_condition;
93  std::atomic<bool> accepting_tasks;
94  std::atomic<bool> shutdown_loop;
95  std::atomic<bool> m_loop_switch;
96 
97  std::vector<std::thread> thread_pool;
98 };
99 
100 #endif // __SOCKET_LISTENER_H__
SocketListener::cleanup
void cleanup()
Definition: socket_listener.cpp:204
SocketListener::~SocketListener
~SocketListener()
Definition: socket_listener.cpp:40
types.h
SocketListener::SocketListener
SocketListener(std::string ipAddress, int port)
Definition: socket_listener.cpp:30
send_interface.h
SocketListener::run
void run()
Definition: socket_listener.cpp:155
SocketListener::MessageHandler::MessageHandler
MessageHandler(std::function< void()> cb)
Definition: socket_listener.h:27
SendInterface
Definition: send_interface.h:7
SocketListener::MessageHandler
Definition: socket_listener.h:25
SocketListener::init
bool init()
Definition: socket_listener.cpp:63
MessageHandler
void MessageHandler(MessageProcessor processor, int client_socket_fd, std::string message)
Definition: types.h:9
SocketListener::createMessageHandler
MessageHandler createMessageHandler(std::function< void()> cb)
Definition: socket_listener.cpp:42
SocketListener
Definition: socket_listener.h:23
SocketListener::MessageHandler::operator()
void operator()()
Definition: socket_listener.h:29
SocketListener::sendMessage
virtual void sendMessage(int client_socket_fd, std::shared_ptr< char[]> buffer) override
Definition: socket_listener.cpp:53