From eece05c1186a8df00f15e0d6d5e2393f62fdc50a Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Tue, 14 Mar 2023 00:02:47 +0100 Subject: [PATCH] Add support for using `INetworkSerializable` on custom structure in C++ for networking --- Source/Engine/Networking/NetworkStream.cpp | 21 +++++++++++++++++++++ Source/Engine/Networking/NetworkStream.h | 10 ++++++++++ 2 files changed, 31 insertions(+) diff --git a/Source/Engine/Networking/NetworkStream.cpp b/Source/Engine/Networking/NetworkStream.cpp index f7ce87156..6de667878 100644 --- a/Source/Engine/Networking/NetworkStream.cpp +++ b/Source/Engine/Networking/NetworkStream.cpp @@ -1,6 +1,7 @@ // Copyright (c) 2012-2023 Wojciech Figat. All rights reserved. #include "NetworkStream.h" +#include "INetworkSerializable.h" NetworkStream::NetworkStream(const SpawnParams& params) : ScriptingObject(params) @@ -47,6 +48,26 @@ void NetworkStream::Initialize(byte* buffer, uint32 length) _allocated = false; } +void NetworkStream::Read(INetworkSerializable& obj) +{ + obj.Deserialize(this); +} + +void NetworkStream::Read(INetworkSerializable* obj) +{ + obj->Deserialize(this); +} + +void NetworkStream::Write(INetworkSerializable& obj) +{ + obj.Serialize(this); +} + +void NetworkStream::Write(INetworkSerializable* obj) +{ + obj->Serialize(this); +} + void NetworkStream::Flush() { // Nothing to do diff --git a/Source/Engine/Networking/NetworkStream.h b/Source/Engine/Networking/NetworkStream.h index af87c2363..190bd0dcb 100644 --- a/Source/Engine/Networking/NetworkStream.h +++ b/Source/Engine/Networking/NetworkStream.h @@ -6,6 +6,8 @@ #include "Engine/Serialization/ReadStream.h" #include "Engine/Serialization/WriteStream.h" +class INetworkSerializable; + /// /// Objects and values serialization stream for sending data over network. Uses memory buffer for both read and write operations. /// @@ -62,6 +64,14 @@ public: ReadBytes(data, bytes); } + using ReadStream::Read; + void Read(INetworkSerializable& obj); + void Read(INetworkSerializable* obj); + + using WriteStream::Write; + void Write(INetworkSerializable& obj); + void Write(INetworkSerializable* obj); + public: // [Stream] void Flush() override;