removed pointer to server socket

This commit is contained in:
Erik Frojdh 2020-04-20 17:20:33 +02:00
parent bc389f4825
commit 8afa11ed33
2 changed files with 21 additions and 25 deletions

View File

@ -24,19 +24,16 @@ using Interface = sls::ServerInterface;
ClientInterface::~ClientInterface() { ClientInterface::~ClientInterface() {
killTcpThread = true; killTcpThread = true;
// shut down tcp sockets LOG(logINFO) << "Shutting down TCP Socket on port " << portNumber;
if (server.get() != nullptr) { server.shutdown();
LOG(logINFO) << "Shutting down TCP Socket on port " << portNumber; LOG(logDEBUG) << "TCP Socket closed on port " << portNumber;
server->shutDownSocket();
LOG(logDEBUG) << "TCP Socket closed on port " << portNumber;
}
// shut down tcp thread
tcpThread->join(); tcpThread->join();
} }
ClientInterface::ClientInterface(int portNumber) ClientInterface::ClientInterface(int portNumber)
: myDetectorType(GOTTHARD), : myDetectorType(GOTTHARD),
portNumber(portNumber > 0 ? portNumber : DEFAULT_PORTNO + 2) { portNumber(portNumber > 0 ? portNumber : DEFAULT_PORTNO + 2),
server(portNumber) {
functionTable(); functionTable();
// start up tcp thread // start up tcp thread
tcpThread = sls::make_unique<std::thread>(&ClientInterface::startTCPServer, this); tcpThread = sls::make_unique<std::thread>(&ClientInterface::startTCPServer, this);
@ -73,11 +70,11 @@ void ClientInterface::startTCPServer() {
LOG(logINFOBLUE) << "Created [ TCP server Tid: " << syscall(SYS_gettid) << "]"; LOG(logINFOBLUE) << "Created [ TCP server Tid: " << syscall(SYS_gettid) << "]";
LOG(logINFO) << "SLS Receiver starting TCP Server on port " LOG(logINFO) << "SLS Receiver starting TCP Server on port "
<< portNumber << '\n'; << portNumber << '\n';
server = sls::make_unique<sls::ServerSocket>(portNumber); // server = sls::make_unique<sls::ServerSocket>(portNumber);
while (true) { while (!killTcpThread) {
LOG(logDEBUG1) << "Start accept loop"; LOG(logDEBUG1) << "Start accept loop";
try { try {
auto socket = server->accept(); auto socket = server.accept();
try { try {
verifyLock(); verifyLock();
ret = decodeFunction(socket); ret = decodeFunction(socket);
@ -95,10 +92,6 @@ void ClientInterface::startTCPServer() {
} catch (const RuntimeError &e) { } catch (const RuntimeError &e) {
LOG(logERROR) << "Accept failed"; LOG(logERROR) << "Accept failed";
} }
// destructor to kill this thread
if (killTcpThread) {
break;
}
} }
if (receiver) { if (receiver) {
@ -253,7 +246,7 @@ void ClientInterface::validate(T arg, T retval, const std::string& modename,
} }
void ClientInterface::verifyLock() { void ClientInterface::verifyLock() {
if (lockedByClient && server->getThisClient() != server->getLockedBy()) { if (lockedByClient && server.getThisClient() != server.getLockedBy()) {
throw sls::SocketError("Receiver locked\n"); throw sls::SocketError("Receiver locked\n");
} }
} }
@ -299,10 +292,10 @@ int ClientInterface::lock_receiver(Interface &socket) {
auto lock = socket.Receive<int>(); auto lock = socket.Receive<int>();
LOG(logDEBUG1) << "Locking Server to " << lock; LOG(logDEBUG1) << "Locking Server to " << lock;
if (lock >= 0) { if (lock >= 0) {
if (!lockedByClient || (server->getLockedBy() == server->getThisClient())) { if (!lockedByClient || (server.getLockedBy() == server.getThisClient())) {
lockedByClient = lock; lockedByClient = lock;
lock ? server->setLockedBy(server->getThisClient()) lock ? server.setLockedBy(server.getThisClient())
: server->setLockedBy(sls::IpAddr{}); : server.setLockedBy(sls::IpAddr{});
} else { } else {
throw RuntimeError("Receiver locked\n"); throw RuntimeError("Receiver locked\n");
} }
@ -311,7 +304,7 @@ int ClientInterface::lock_receiver(Interface &socket) {
} }
int ClientInterface::get_last_client_ip(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) { int ClientInterface::set_port(Interface &socket) {
@ -321,9 +314,11 @@ int ClientInterface::set_port(Interface &socket) {
" is too low (<1024)"); " is too low (<1024)");
LOG(logINFO) << "TCP port set to " << p_number << std::endl; LOG(logINFO) << "TCP port set to " << p_number << std::endl;
auto new_server = sls::make_unique<sls::ServerSocket>(p_number); sls::ServerSocket new_server(p_number);
new_server->setLockedBy(server->getLockedBy()); // auto new_server = sls::make_unique<sls::ServerSocket>(p_number);
new_server->setLastClient(server->getThisClient()); new_server.setLockedBy(server.getLockedBy());
new_server.setLastClient(server.getThisClient());
// server = std::move(new_server);
server = std::move(new_server); server = std::move(new_server);
socket.sendResult(p_number); socket.sendResult(p_number);
return OK; return OK;

View File

@ -12,13 +12,14 @@ class ServerInterface;
class ClientInterface : private virtual slsDetectorDefs { class ClientInterface : private virtual slsDetectorDefs {
enum numberMode { DEC, HEX }; enum numberMode { DEC, HEX };
detectorType myDetectorType; detectorType myDetectorType;
std::unique_ptr<sls::ServerSocket> server; int portNumber{0};
sls::ServerSocket server;
std::unique_ptr<Implementation> receiver; std::unique_ptr<Implementation> receiver;
std::unique_ptr<std::thread> tcpThread; std::unique_ptr<std::thread> tcpThread;
int ret{OK}; int ret{OK};
int fnum{-1}; int fnum{-1};
int lockedByClient{0}; int lockedByClient{0};
int portNumber{0};
std::atomic<bool> killTcpThread{false}; std::atomic<bool> killTcpThread{false};