IPCMessage.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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, StringHash& eventType, VariantMap& eventData)
  23. {
  24. eventType = buffer.ReadStringHash();
  25. eventData.Clear();
  26. eventData = buffer.ReadVariantMap();
  27. return true;
  28. }
  29. bool DoSend(PipeTransport& transport, const StringHash& eventType, const VariantMap& eventData)
  30. {
  31. VectorBuffer buffer;
  32. buffer.WriteStringHash(eventType);
  33. buffer.WriteVariantMap(eventData);
  34. IPCMessageHeader header;
  35. header.messageType_ = IPC_MESSAGE_EVENT;
  36. header.messageSize_ = buffer.GetSize();
  37. transport.Write(&header, sizeof(IPCMessageHeader));
  38. transport.Write(buffer.GetData(), header.messageSize_);
  39. return true;
  40. }
  41. };
  42. }