allow message serialization through DataBuffer
All checks were successful
Linux arm64 / Build (push) Successful in 15s

This commit is contained in:
2025-07-31 15:01:37 +02:00
parent a1a4176801
commit bce37f59df
3 changed files with 250 additions and 196 deletions

View File

@@ -0,0 +1,47 @@
#pragma once
#include <sp/protocol/MessageFactory.h>
namespace sp {
template <typename TMessageID, typename THandler>
DataBuffer& operator<<(DataBuffer& a_Buffer, const std::unique_ptr<MessageBase<TMessageID, THandler>>& a_Message) {
return a_Buffer << VarInt{static_cast<std::uint64_t>(a_Message->GetId())} << a_Message->Write();
}
template <typename TMessageID, typename THandler>
DataBuffer& operator<<(DataBuffer& a_Buffer, const std::shared_ptr<MessageBase<TMessageID, THandler>>& a_Message) {
return a_Buffer << VarInt{static_cast<std::uint64_t>(a_Message->GetId())} << a_Message->Write();
}
template <typename TMessageID, typename THandler, typename TTMessages>
DataBuffer& operator>>(DataBuffer& a_Buffer, std::unique_ptr<MessageBase<TMessageID, THandler>>& a_Message) {
using TBase = MessageBase<TMessageID, THandler>;
using MsgId = typename TBase::MessageIdType;
static MessageFactory<TBase, TTMessages> factory;
VarInt msgId;
a_Buffer >> msgId;
a_Message = factory.CreateMessage(MsgId(msgId.GetValue()));
a_Message->Read(a_Buffer);
return a_Buffer;
}
template <typename TMessageID, typename THandler, typename TTMessages>
DataBuffer& operator>>(DataBuffer& a_Buffer, std::shared_ptr<MessageBase<TMessageID, THandler>>& a_Message) {
using TBase = MessageBase<TMessageID, THandler>;
using MsgId = typename TBase::MessageIdType;
static MessageFactory<TBase, TTMessages> factory;
VarInt msgId;
a_Buffer >> msgId;
a_Message = std::shared_ptr<TBase>(factory.CreateMessage(MsgId(msgId.GetValue())).release());
a_Message->Read(a_Buffer);
return a_Buffer;
}
} // namespace sp