IPCChannel.h 930 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #pragma once
  2. #include "../Core/Mutex.h"
  3. #include "../Core/Thread.h"
  4. #include "../Core/Object.h"
  5. #include "IPC.h"
  6. #include "IPCMessage.h"
  7. #include "IPCUnix.h"
  8. #ifdef ATOMIC_PLATFORM_WINDOWS
  9. // Windows defines PostMessage as PostMessgeA/W
  10. #undef PostMessage
  11. #endif
  12. namespace Atomic
  13. {
  14. class IPCChannel : public Object, public Thread
  15. {
  16. OBJECT(IPCChannel)
  17. public:
  18. IPCChannel(Context* context, unsigned id);
  19. virtual ~IPCChannel();
  20. virtual void ThreadFunction() {}
  21. unsigned GetID() { return id_; }
  22. bool Receive();
  23. void PostMessage(StringHash eventType, VariantMap& eventData);
  24. protected:
  25. unsigned id_;
  26. // for access from thread
  27. WeakPtr<IPC> ipc_;
  28. // for brokers this is the worker process
  29. // for workers, the broker process
  30. SharedPtr<IPCProcess> otherProcess_;
  31. PipeTransport transport_;
  32. IPCMessageHeader currentHeader_;
  33. VectorBuffer dataBuffer_;
  34. };
  35. }