You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

39 lines
891B

  1. #include "ThreadClient.h"
  2. #include "ThreadServer.h"
  3. #include "ThreadSharedState.h"
  4. #include <assert.h>
  5. ThreadClient::ThreadClient(std::shared_ptr<ThreadSharedState> state,
  6. std::unique_ptr<ThreadServer> server) : sharedState(state), _server(std::move(server))
  7. {
  8. assert(!sharedState->serverRunning);
  9. _server->start();
  10. while (!sharedState->serverRunning) {
  11. }
  12. }
  13. ThreadClient::~ThreadClient()
  14. {
  15. sharedState->client_askServerToStop();
  16. sharedState->serverStopRequested.store(true); // ask server to stop
  17. while (sharedState->serverRunning) {
  18. static bool did = false;
  19. if (!did) {
  20. did = true;
  21. }
  22. }
  23. }
  24. ThreadMessage * ThreadClient::getMessage()
  25. {
  26. return sharedState->client_pollMessage();
  27. }
  28. bool ThreadClient::sendMessage(ThreadMessage * message)
  29. {
  30. return sharedState->client_trySendMessage(message);
  31. }