IPCMessage.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #pragma once
  2. #include "../Core/Variant.h"
  3. #include "../IO/VectorBuffer.h"
  4. #include "../IO/MemoryBuffer.h"
  5. #include "IPCUnix.h"
  6. namespace Atomic
  7. {
  8. const unsigned IPC_MESSAGE_UNDEFINED = 0;
  9. const unsigned IPC_MESSAGE_EVENT = 1;
  10. struct IPCMessageHeader
  11. {
  12. unsigned messageType_;
  13. unsigned messageSize_;
  14. };
  15. class IPCMessageEvent
  16. {
  17. public:
  18. bool DoRead(MemoryBuffer& buffer, StringHash& eventType, VariantMap& eventData)
  19. {
  20. eventType = buffer.ReadStringHash();
  21. eventData.Clear();
  22. eventData = buffer.ReadVariantMap();
  23. return true;
  24. }
  25. bool DoSend(PipeTransport& transport, const StringHash& eventType, const VariantMap& eventData)
  26. {
  27. VectorBuffer buffer;
  28. buffer.WriteStringHash(eventType);
  29. buffer.WriteVariantMap(eventData);
  30. IPCMessageHeader header;
  31. header.messageType_ = IPC_MESSAGE_EVENT;
  32. header.messageSize_ = buffer.GetSize();
  33. transport.Write(&header, sizeof(IPCMessageHeader));
  34. transport.Write(buffer.GetData(), header.messageSize_);
  35. return true;
  36. }
  37. };
  38. }