IPC.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. unsigned channelID_;
  13. StringHash eventType_;
  14. VariantMap eventData_;
  15. };
  16. class IPC : public Object
  17. {
  18. OBJECT(IPC);
  19. public:
  20. /// Construct.
  21. IPC(Context* context);
  22. /// Destruct.
  23. virtual ~IPC();
  24. // queues an event from a worker or broker receiving thread
  25. void QueueEvent(unsigned id, StringHash eventType, VariantMap& eventData);
  26. // for a child worker process
  27. bool InitWorker(unsigned id, IPCHandle fd1, IPCHandle fd2);
  28. // spawn a worker process
  29. IPCBroker* SpawnWorker(const String& command, const Vector<String>& args, const String& initialDirectory = "");
  30. // worker -> broker
  31. void SendEventToBroker(StringHash eventType);
  32. void SendEventToBroker(StringHash eventType, VariantMap& eventData);
  33. private:
  34. // if non-zero we're a worked and this is out broker's channel id
  35. unsigned workerChannelID_;
  36. // processes queued events
  37. void HandleUpdate(StringHash eventType, VariantMap& eventData);
  38. mutable Mutex eventMutex_;
  39. List<QueuedEvent> queuedEvents_;
  40. Vector<SharedPtr<IPCBroker> > brokers_;
  41. // valid on child
  42. SharedPtr<IPCWorker> worker_;
  43. };
  44. }