otsdaq  v2_04_02
TCPServer.cc
1 #include "otsdaq/NetworkUtilities/TCPServer.h"
2 #include <errno.h> // errno
3 #include <string.h> // errno
4 #include "otsdaq/NetworkUtilities/TCPTransceiverSocket.h"
5 
6 #include <iostream>
7 using namespace ots;
8 
9 //========================================================================================================================
10 TCPServer::TCPServer(int serverPort, unsigned int maxNumberOfClients)
11  : TCPServerBase(serverPort, maxNumberOfClients)
12 {
13  // fAcceptFuture = std::async(std::launch::async, &TCPServer::acceptConnections,
14  // this);
15 }
16 
17 //========================================================================================================================
18 TCPServer::~TCPServer(void) {}
19 
20 // void TCPServer::StartAcceptConnections()
21 // {
22 
23 // }
24 //========================================================================================================================
25 // time out or protection for this receive method?
26 // void TCPServer::connectClient(int fdClientSocket)
27 void TCPServer::connectClient(TCPTransceiverSocket* socket)
28 {
29  // std::cout << __PRETTY_FUNCTION__ << "Waiting 3 seconds" << std::endl;
30  // std::this_thread::sleep_for(std::chrono::milliseconds(3000));
31  while(1)
32  {
33  std::cout << __PRETTY_FUNCTION__
34  << "Waiting for message for socket #: " << socket->getSocketId()
35  << std::endl;
36  std::string message;
37  try
38  {
39  message = socket->receivePacket();
40  }
41  catch(const std::exception& e)
42  {
43  std::cerr << e.what() << '\n';
44  closeClientSocket(socket->getSocketId());
45  break;
46  }
47 
48  std::cout << __PRETTY_FUNCTION__
49  //<< "Received message:-" << message << "-"
50  << "Message Length=" << message.length()
51  << " From socket #: " << socket->getSocketId() << std::endl;
52  message = interpretMessage(message);
53 
54  if(message != "")
55  {
56  // std::cout << __PRETTY_FUNCTION__ << "Sending back message:-" <<
57  // messageToClient << "-(nbytes=" << messageToClient.length() << ") to socket
58  // #: " << socket->getSocketId() << std::endl;
59  socket->sendPacket(message);
60  }
61  else
62  std::cout << __PRETTY_FUNCTION__ << "Not sending anything back to socket #: "
63  << socket->getSocketId() << std::endl;
64 
65  std::cout << __PRETTY_FUNCTION__
66  << "After message sent now checking for more... socket #: "
67  << socket->getSocketId() << std::endl;
68  }
69 
70  std::cout << __PRETTY_FUNCTION__
71  << "Thread done for socket #: " << socket->getSocketId() << std::endl;
72 }
73 
74 //========================================================================================================================
75 void TCPServer::acceptConnections()
76 {
77  // std::pair<std::unordered_map<int, TCPTransceiverSocket>::iterator, bool> element;
78  while(true)
79  {
80  try
81  {
82  std::thread thread(
83  &TCPServer::connectClient, this, acceptClient<TCPTransceiverSocket>());
84  thread.detach();
85  }
86  catch(int e)
87  {
88  std::cout << __PRETTY_FUNCTION__ << "SHUTTING DOWN SOCKET" << std::endl;
89  std::cout << __PRETTY_FUNCTION__ << "SHUTTING DOWN SOCKET" << std::endl;
90  std::cout << __PRETTY_FUNCTION__ << "SHUTTING DOWN SOCKET" << std::endl;
91 
92  if(e == E_SHUTDOWN)
93  break;
94  }
95  }
96  fAcceptPromise.set_value(true);
97 }