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.

43 lines
1.2KB

  1. #pragma once
  2. #include <memory>
  3. class ThreadSharedState;
  4. class ThreadServer;
  5. class ThreadMessage;
  6. /**
  7. * This class is meant to be used directly (not sub-classed)
  8. * All APIs are non-blocking (polled), so that they may be called
  9. * from an audio render thread without fear of priority inversion.
  10. * See ThreadSharedState and ThreadSerever for more info.
  11. */
  12. class ThreadClient
  13. {
  14. public:
  15. ThreadClient(std::shared_ptr<ThreadSharedState> state, std::unique_ptr<ThreadServer> server);
  16. ~ThreadClient();
  17. /**
  18. * Poll to see if a message has come back from the server.
  19. * Will return null if no message waiting.
  20. */
  21. ThreadMessage * getMessage();
  22. /**
  23. * Try to send a message.
  24. * Returns true if message sent.
  25. *
  26. * Message might not be sent for various reasons:
  27. * - Mailbox still has previous message.
  28. * - Unable to lock semaphore without blocking.
  29. */
  30. bool sendMessage(ThreadMessage *);
  31. const ThreadClient& operator= (const ThreadClient&) = delete;
  32. ThreadClient(const ThreadClient&) = delete;
  33. private:
  34. std::shared_ptr<ThreadSharedState> sharedState;
  35. std::unique_ptr<ThreadServer> _server;
  36. };