Motion Master
Loading...
Searching...
No Matches
server.h
Go to the documentation of this file.
1#pragma once
2
3#include <ixwebsocket/IXConnectionState.h>
4#include <ixwebsocket/IXWebSocket.h>
5#include <readerwriterqueue/readerwriterqueue.h>
6
7#include <atomic>
8#include <chrono>
9#include <thread>
10
13
14class Server {
15 public:
16 Server(moodycamel::ReaderWriterQueue<IncomingMachineMessage>
17 &incoming_machine_message_queue,
18 moodycamel::ReaderWriterQueue<OutgoingMachineMessage>
19 &outgoing_machine_message_queue);
20 ~Server();
21
25 void start();
26
30 void stop();
31
35 void wait();
36
37 /******************** CUSTOM WS CONNECTION STATE CLASS ********************/
38 class MotionMasterConnectionState : public ix::ConnectionState {
39 public:
40 MotionMasterConnectionState() : ConnectionState() {}
41
42 std::string getClientId() { return client_id_; }
43
44 bool setClientId(const std::string &client_id) {
45 if (client_id_.empty()) {
46 client_id_ = client_id;
47 return true;
48 } else {
49 return false;
50 }
51 }
52
53 static std::shared_ptr<ConnectionState>
55 return std::make_shared<MotionMasterConnectionState>();
56 }
57
58 protected:
59 std::string client_id_;
60 };
61
62 private:
63 std::unique_ptr<std::thread> server_thread_;
64 std::atomic_bool running_;
65
66 moodycamel::ReaderWriterQueue<IncomingMachineMessage>
67 &incoming_machine_message_queue_;
68 moodycamel::ReaderWriterQueue<OutgoingMachineMessage>
69 &outgoing_machine_message_queue_;
70
71 // WebSockets
72 std::unordered_map<std::string /* client ID */,
73 std::shared_ptr<ix::WebSocket>>
74 dealer_ws_client_map_;
75 std::unordered_map<std::string /* client ID */,
76 std::shared_ptr<ix::WebSocket>>
77 sub_ws_client_map_;
78
79 std::unordered_map<std::string /* client ID */,
80 moodycamel::ReaderWriterQueue<IncomingMachineMessage>>
81 dealer_ws_incoming_message_map_;
82
83 std::unordered_map<std::string /* topic */,
84 std::vector<std::string> /* client IDs */>
85 topic_to_client_ids_map_;
86
87 std::unordered_map<std::string /* request message ID */,
88 std::string /* topic */>
89 request_id_to_topic_map_;
90
91 std::mutex mutex_;
92
96 void run();
97
103 void dealer_ws_close_clean_up(const std::string &client_id);
104
110 void sub_ws_close_clean_up(const std::string &client_id);
111
115 void ws_clean_up();
116
120 void send_outgoing_messages();
121};
MotionMasterConnectionState()
Definition: server.h:40
std::string getClientId()
Definition: server.h:42
bool setClientId(const std::string &client_id)
Definition: server.h:44
std::string client_id_
Definition: server.h:59
static std::shared_ptr< ConnectionState > createMotionMasterConnectionState()
Definition: server.h:54
Definition: server.h:14
void stop()
Stop the Server.
Definition: server.cc:337
void wait()
block until the Server finishes execution
Definition: server.cc:339
~Server()
Definition: server.cc:24
void start()
Start the Server.
Definition: server.cc:332