IPC.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #pragma once
  2. #include "../Core/Object.h"
  3. #include "../Core/Mutex.h"
  4. #include "../Container/List.h"
  5. #include "IPCTypes.h"
  6. namespace Atomic
  7. {
  8. class IPCBroker;
  9. class IPCWorker;
  10. struct QueuedEvent
  11. {
  12. StringHash eventType_;
  13. VariantMap eventData_;
  14. };
  15. class IPC : public Object
  16. {
  17. OBJECT(IPC);
  18. public:
  19. /// Construct.
  20. IPC(Context* context);
  21. /// Destruct.
  22. virtual ~IPC();
  23. // queues an event from a worker or broker receiving thread
  24. void QueueEvent(StringHash eventType, VariantMap& eventData);
  25. // for a child worker process
  26. bool InitWorker(IPCHandle fd1, IPCHandle fd2);
  27. // spawn a worker process
  28. IPCBroker* SpawnWorker(const String& command, const Vector<String>& args, const String& initialDirectory = "");
  29. // worker -> broker
  30. void SendEventToBroker(StringHash eventType);
  31. void SendEventToBroker(StringHash eventType, VariantMap& eventData);
  32. private:
  33. // processes queued events
  34. void HandleUpdate(StringHash eventType, VariantMap& eventData);
  35. mutable Mutex eventMutex_;
  36. List<QueuedEvent> queuedEvents_;
  37. Vector<SharedPtr<IPCBroker> > brokers_;
  38. // valid on child
  39. SharedPtr<IPCWorker> worker_;
  40. };
  41. }