8 #ifndef NT_DISPATCHER_H_
9 #define NT_DISPATCHER_H_
13 #include <condition_variable>
20 #include "llvm/StringRef.h"
22 #include "atomic_static.h"
23 #include "NetworkConnection.h"
33 friend class DispatcherTest;
37 void StartServer(
StringRef persist_filename,
38 std::unique_ptr<NetworkAcceptor> acceptor);
39 void StartClient(std::function<std::unique_ptr<NetworkStream>()> connect);
41 void SetUpdateRate(
double interval);
44 std::vector<ConnectionInfo> GetConnections()
const;
45 void NotifyConnections(ConnectionListenerCallback callback)
const;
47 bool active()
const {
return m_active; }
56 void DispatchThreadMain();
57 void ServerThreadMain();
58 void ClientThreadMain(
59 std::function<std::unique_ptr<NetworkStream>()> connect);
63 std::function<std::shared_ptr<Message>()> get_msg,
64 std::function<
void(
llvm::ArrayRef<std::shared_ptr<Message>>)> send_msgs);
67 std::function<std::shared_ptr<Message>()> get_msg,
68 std::function<
void(
llvm::ArrayRef<std::shared_ptr<Message>>)> send_msgs);
70 void ClientReconnect(
unsigned int proto_rev = 0x0300);
77 bool m_server =
false;
78 std::string m_persist_filename;
79 std::thread m_dispatch_thread;
80 std::thread m_clientserver_thread;
82 std::unique_ptr<NetworkAcceptor> m_server_acceptor;
85 mutable std::mutex m_user_mutex;
86 std::vector<std::shared_ptr<NetworkConnection>> m_connections;
87 std::string m_identity;
89 std::atomic_bool m_active;
90 std::atomic_uint m_update_rate;
93 std::mutex m_flush_mutex;
94 std::condition_variable m_flush_cv;
95 std::chrono::steady_clock::time_point m_last_flush;
96 bool m_do_flush =
false;
99 std::condition_variable m_reconnect_cv;
100 unsigned int m_reconnect_proto_rev = 0x0300;
101 bool m_do_reconnect =
true;
105 friend class DispatcherTest;
112 void StartServer(
StringRef persist_filename,
const char* listen_address,
114 void StartClient(
const char* server_name,
unsigned int port);
127 #endif // NT_DISPATCHER_H_
Definition: Dispatcher.h:32
Definition: NetworkStream.h:15
Definition: NetworkAcceptor.h:13
Definition: Dispatcher.h:104
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory)...
Definition: ArrayRef.h:54
Definition: NetworkConnection.h:26
Definition: Notifier.h:19
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:39