IPC.h 1.1 KB

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