IPCMessage.h 1.2 KB

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