8 #ifndef NT_DISPATCHER_H_
9 #define NT_DISPATCHER_H_
13 #include <condition_variable>
20 #include "llvm/StringRef.h"
22 #include "support/atomic_static.h"
23 #include "NetworkConnection.h"
28 class NetworkAcceptor;
35 friend class DispatcherTest;
38 typedef std::function<std::unique_ptr<wpi::NetworkStream>()> Connector;
42 unsigned int GetNetworkMode()
const;
43 void StartServer(llvm::StringRef persist_filename,
44 std::unique_ptr<wpi::NetworkAcceptor> acceptor);
47 void SetUpdateRate(
double interval);
48 void SetIdentity(llvm::StringRef name);
50 std::vector<ConnectionInfo> GetConnections()
const;
51 void NotifyConnections(ConnectionListenerCallback callback)
const;
53 void SetConnector(Connector connector);
54 void SetConnector(std::vector<Connector>&& connectors);
56 void SetConnectorOverride(Connector connector);
57 void ClearConnectorOverride();
59 bool active()
const {
return m_active; }
68 void DispatchThreadMain();
69 void ServerThreadMain();
70 void ClientThreadMain();
74 std::function<std::shared_ptr<Message>()> get_msg,
75 std::function<
void(llvm::ArrayRef<std::shared_ptr<Message>>)> send_msgs);
78 std::function<std::shared_ptr<Message>()> get_msg,
79 std::function<
void(llvm::ArrayRef<std::shared_ptr<Message>>)> send_msgs);
81 void ClientReconnect(
unsigned int proto_rev = 0x0300);
88 unsigned int m_networkMode = NT_NET_MODE_NONE;
89 std::string m_persist_filename;
90 std::thread m_dispatch_thread;
91 std::thread m_clientserver_thread;
93 std::unique_ptr<wpi::NetworkAcceptor> m_server_acceptor;
94 Connector m_client_connector_override;
95 std::vector<Connector> m_client_connectors;
98 mutable std::mutex m_user_mutex;
99 std::vector<std::shared_ptr<NetworkConnection>> m_connections;
100 std::string m_identity;
102 std::atomic_bool m_active;
103 std::atomic_uint m_update_rate;
106 std::mutex m_flush_mutex;
107 std::condition_variable m_flush_cv;
108 std::chrono::steady_clock::time_point m_last_flush;
109 bool m_do_flush =
false;
112 std::condition_variable m_reconnect_cv;
113 unsigned int m_reconnect_proto_rev = 0x0300;
114 bool m_do_reconnect =
true;
118 friend class DispatcherTest;
126 void StartServer(StringRef persist_filename,
const char* listen_address,
129 void SetServer(
const char* server_name,
unsigned int port);
130 void SetServer(ArrayRef<std::pair<StringRef, unsigned int>> servers);
132 void SetServerOverride(
const char* server_name,
unsigned int port);
133 void ClearServerOverride();
145 #endif // NT_DISPATCHER_H_
Definition: Dispatcher.h:34
Definition: Dispatcher.h:117
Definition: NetworkConnection.h:28
Definition: Notifier.h:19