otsdaq  3.03.00
TCPListenServer.cc
1 #include "otsdaq/NetworkUtilities/TCPListenServer.h"
2 #include "otsdaq/NetworkUtilities/TCPReceiverSocket.h"
3 
4 #include <iostream>
5 
6 using namespace ots;
7 
8 //==============================================================================
9 TCPListenServer::TCPListenServer(unsigned int serverPort, unsigned int maxNumberOfClients)
10  : TCPServerBase(serverPort, maxNumberOfClients)
11 {
12 }
13 
14 //==============================================================================
15 TCPListenServer::~TCPListenServer(void)
16 {
17  // std::cout << __PRETTY_FUNCTION__ << "Done" << std::endl;
18 }
19 
20 std::string ots::TCPListenServer::receivePacket()
21 {
22  if(!fConnectedClients.empty())
23  {
24  auto it = fConnectedClients.find(lastReceived);
25  if(it == fConnectedClients.end() || ++it == fConnectedClients.end())
26  it = fConnectedClients.begin();
27  lastReceived = it->first;
28  TLOG(25, "TCPListenServer")
29  << "Reading from socket " << lastReceived << ", there are "
30  << fConnectedClients.size() << " clients connected.";
31  return dynamic_cast<TCPReceiverSocket*>(it->second)->receivePacket();
32  }
33  throw std::runtime_error("No clients connected!");
34 }
35 
36 //==============================================================================
37 void TCPListenServer::acceptConnections()
38 {
39  while(getAccept())
40  {
41  try
42  {
43  // __attribute__((unused)) TCPTransmitterSocket* clientSocket = acceptClient<TCPTransmitterSocket>();
44  acceptClient<TCPReceiverSocket>();
45  }
46  catch(int e)
47  {
48  if(e == E_SHUTDOWN)
49  break;
50  }
51  }
52  // fAcceptPromise.set_value(true);
53 }