R-Type
R-Type project
MessagePacking.hpp
1 #pragma once
2 
3 #include "NetworkMessage.hpp"
4 #include <typeinfo>
5 
6 namespace KapMirror {
7  class MessagePacking {
8  public:
14  template <typename T>
15  inline static ushort getId() {
16  return (ushort)std::hash<std::string>()(typeid(T).name());
17  }
18 
25  template <typename T>
26  inline static void pack(T& message, NetworkWriter& writer) {
27  writer.write(getId<T>());
28 
29  // serialize message
30  message.serialize(writer);
31  }
32 
39  inline static void unpack(NetworkReader& reader, ushort& messageType) { messageType = reader.read<ushort>(); }
40  };
41 } // namespace KapMirror
KapMirror::MessagePacking::getId
static ushort getId()
Gerenate a ID from a message type.
Definition: MessagePacking.hpp:15
KapMirror::MessagePacking
Definition: MessagePacking.hpp:7
KapMirror::MessagePacking::pack
static void pack(T &message, NetworkWriter &writer)
Pack a message to a byte array with the message ID.
Definition: MessagePacking.hpp:26
KapMirror::NetworkReader
Definition: NetworkReader.hpp:10
KapMirror::NetworkWriter::write
void write(T value)
Write a value to the buffer.
Definition: NetworkWriter.hpp:44
KapMirror::NetworkWriter
Definition: NetworkWriter.hpp:12
KapMirror::NetworkReader::read
T read()
Read a value from the buffer.
Definition: NetworkReader.hpp:41
KapMirror::MessagePacking::unpack
static void unpack(NetworkReader &reader, ushort &messageType)
Unpack a message from a byte array.
Definition: MessagePacking.hpp:39