1 #ifndef _ots_TCPServerBase_h_
2 #define _ots_TCPServerBase_h_
11 #include "otsdaq/NetworkUtilities/TCPSocket.h"
19 unsigned int serverPort,
20 unsigned int maxNumberOfClients = 0);
23 void startAccept(
void);
24 void shutdownAccept(
void);
25 void broadcastPacket(
const char* message, std::size_t length);
26 void broadcastPacket(
const std::string& message);
27 void broadcast(
const char* message, std::size_t length);
28 void broadcast(
const std::string& message);
29 void broadcast(
const std::vector<char>& message);
30 void broadcast(
const std::vector<uint16_t>& message);
33 virtual void acceptConnections() = 0;
35 void closeClientSocket(
int socket);
37 T* acceptClient(
bool blocking =
true)
39 int socketId = accept(blocking);
40 std::lock_guard<std::mutex> lock(fClientsMutex);
41 fConnectedClients.emplace(socketId,
new T(socketId));
42 return dynamic_cast<T*
>(fConnectedClients[socketId]);
50 void pingActiveClients(
void);
55 mutable std::mutex fClientsMutex;
56 std::map<int, TCPSocket*> fConnectedClients;
57 std::map<int, std::future<void>> fConnectedClientsFuture;
58 const int E_SHUTDOWN = 0;
59 bool getAccept() {
return fAccept.load(); }
62 void closeClientSockets(
64 int accept(
bool blocking =
true);
66 const int fMaxConnectionBacklog = 5;
67 unsigned int fMaxNumberOfClients;
68 unsigned int fServerPort;
69 std::atomic_bool fAccept;
71 std::future<void> fAcceptFuture;
TCPServerBase(unsigned int serverPort, unsigned int maxNumberOfClients=0)
Means as many unsigned allows.
void removeClient(int socketId)
Drop a client whose peer has gone away (no shutdown handshake, just close).
std::vector< int > getClientSocketIds(void) const
Snapshot of connected client socket ids, safe to call from any thread.
defines used also by OtsConfigurationWizardSupervisor