From 8afa11ed337b673e450ed74141afa25927a5b7e6 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Mon, 20 Apr 2020 17:20:33 +0200 Subject: [PATCH] removed pointer to server socket --- slsReceiverSoftware/src/ClientInterface.cpp | 41 +++++++++------------ slsReceiverSoftware/src/ClientInterface.h | 5 ++- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/slsReceiverSoftware/src/ClientInterface.cpp b/slsReceiverSoftware/src/ClientInterface.cpp index c04d378bd..83c751a16 100755 --- a/slsReceiverSoftware/src/ClientInterface.cpp +++ b/slsReceiverSoftware/src/ClientInterface.cpp @@ -24,19 +24,16 @@ using Interface = sls::ServerInterface; ClientInterface::~ClientInterface() { killTcpThread = true; - // shut down tcp sockets - if (server.get() != nullptr) { - LOG(logINFO) << "Shutting down TCP Socket on port " << portNumber; - server->shutDownSocket(); - LOG(logDEBUG) << "TCP Socket closed on port " << portNumber; - } - // shut down tcp thread + LOG(logINFO) << "Shutting down TCP Socket on port " << portNumber; + server.shutdown(); + LOG(logDEBUG) << "TCP Socket closed on port " << portNumber; tcpThread->join(); } ClientInterface::ClientInterface(int portNumber) : myDetectorType(GOTTHARD), - portNumber(portNumber > 0 ? portNumber : DEFAULT_PORTNO + 2) { + portNumber(portNumber > 0 ? portNumber : DEFAULT_PORTNO + 2), + server(portNumber) { functionTable(); // start up tcp thread tcpThread = sls::make_unique(&ClientInterface::startTCPServer, this); @@ -73,11 +70,11 @@ void ClientInterface::startTCPServer() { LOG(logINFOBLUE) << "Created [ TCP server Tid: " << syscall(SYS_gettid) << "]"; LOG(logINFO) << "SLS Receiver starting TCP Server on port " << portNumber << '\n'; - server = sls::make_unique(portNumber); - while (true) { + // server = sls::make_unique(portNumber); + while (!killTcpThread) { LOG(logDEBUG1) << "Start accept loop"; try { - auto socket = server->accept(); + auto socket = server.accept(); try { verifyLock(); ret = decodeFunction(socket); @@ -95,10 +92,6 @@ void ClientInterface::startTCPServer() { } catch (const RuntimeError &e) { LOG(logERROR) << "Accept failed"; } - // destructor to kill this thread - if (killTcpThread) { - break; - } } if (receiver) { @@ -253,7 +246,7 @@ void ClientInterface::validate(T arg, T retval, const std::string& modename, } void ClientInterface::verifyLock() { - if (lockedByClient && server->getThisClient() != server->getLockedBy()) { + if (lockedByClient && server.getThisClient() != server.getLockedBy()) { throw sls::SocketError("Receiver locked\n"); } } @@ -299,10 +292,10 @@ int ClientInterface::lock_receiver(Interface &socket) { auto lock = socket.Receive(); LOG(logDEBUG1) << "Locking Server to " << lock; if (lock >= 0) { - if (!lockedByClient || (server->getLockedBy() == server->getThisClient())) { + if (!lockedByClient || (server.getLockedBy() == server.getThisClient())) { lockedByClient = lock; - lock ? server->setLockedBy(server->getThisClient()) - : server->setLockedBy(sls::IpAddr{}); + lock ? server.setLockedBy(server.getThisClient()) + : server.setLockedBy(sls::IpAddr{}); } else { throw RuntimeError("Receiver locked\n"); } @@ -311,7 +304,7 @@ int ClientInterface::lock_receiver(Interface &socket) { } int ClientInterface::get_last_client_ip(Interface &socket) { - return socket.sendResult(server->getLastClient()); + return socket.sendResult(server.getLastClient()); } int ClientInterface::set_port(Interface &socket) { @@ -321,9 +314,11 @@ int ClientInterface::set_port(Interface &socket) { " is too low (<1024)"); LOG(logINFO) << "TCP port set to " << p_number << std::endl; - auto new_server = sls::make_unique(p_number); - new_server->setLockedBy(server->getLockedBy()); - new_server->setLastClient(server->getThisClient()); + sls::ServerSocket new_server(p_number); + // auto new_server = sls::make_unique(p_number); + new_server.setLockedBy(server.getLockedBy()); + new_server.setLastClient(server.getThisClient()); + // server = std::move(new_server); server = std::move(new_server); socket.sendResult(p_number); return OK; diff --git a/slsReceiverSoftware/src/ClientInterface.h b/slsReceiverSoftware/src/ClientInterface.h index 3bc941578..76063b5ce 100755 --- a/slsReceiverSoftware/src/ClientInterface.h +++ b/slsReceiverSoftware/src/ClientInterface.h @@ -12,13 +12,14 @@ class ServerInterface; class ClientInterface : private virtual slsDetectorDefs { enum numberMode { DEC, HEX }; detectorType myDetectorType; - std::unique_ptr server; + int portNumber{0}; + sls::ServerSocket server; std::unique_ptr receiver; std::unique_ptr tcpThread; int ret{OK}; int fnum{-1}; int lockedByClient{0}; - int portNumber{0}; + std::atomic killTcpThread{false};