#include #include "ThreadServer.h" #include "ThreadSharedState.h" int ThreadServer::_count = 0; ThreadServer::ThreadServer(std::shared_ptr state) : sharedState(state) { ++_count; } ThreadServer::~ThreadServer() { --_count; } void ThreadServer::start() { auto startupFunc = [this]() { this->threadFunction(); }; std::unique_ptr th(new std::thread(startupFunc)); thread = std::move(th); } void ThreadServer::threadFunction() { sharedState->serverRunning = true; for (bool done = false; !done; ) { if (sharedState->serverStopRequested.load()) { done = true; } else { // if msg is null, stop was requested (that's not true anyh more, is it?) ThreadMessage* msg = sharedState->server_waitForMessageOrShutdown(); if (msg) { procMessage(msg); } } } thread->detach(); sharedState->serverRunning = false; } //TODO: get rid of this function void ThreadServer::procMessage(ThreadMessage* msg) { handleMessage(msg); } void ThreadServer::handleMessage(ThreadMessage* ) { assert(false); // derived must override. } void ThreadServer::sendMessageToClient(ThreadMessage* msg) { sharedState->server_sendMessage(msg); }