平面缓冲区中的通用类型

问题描述 投票:0回答:1

我在将游戏网络通信从发送 json 转换为使用平面缓冲区时遇到一些问题。

我的游戏客户端/服务器通信如何工作: 我们有一个名为

GameMessage

的基类
[Serializable]
public class GameMessage
{
    public abstract string TypeIdentifier { get; }
}

然后我们为每种类型的数据操作都有继承自

GameMessage
的类

[Serializable]
public class CreateEntity : GameMessage
{
  public string typeIdentifier = "CreateEntity";
  public override string TypeIdentifier => typeIdentifier;
  public string EntityID;
}
[Serializable]
public class DeleteEntity : GameMessage
{
  public string typeIdentifier = "DeleteEntity";
  public override string TypeIdentifier => typeIdentifier;
  public string EntityID;
}
[Serializable]
public class ChangeAttribute: GameMessage
{
  public string typeIdentifier = "ChangeAttribute";
  public override string TypeIdentifier => typeIdentifier;
  public string EntityID;
  public AttributeData Attribute;
}

在json反序列化代码中,我们从

TypeIdentifier
参数中读取来识别所需的反序列化类型。这允许客户端确定消息应该反序列化为什么类型,因此我们可以以一种很好的方式根据消息类型运行处理行为。这对于平面缓冲区实际上不起作用。

我的问题: 有没有一种好方法使用平面缓冲区来通常定义

table
(或在 C# 中称为
type
),以便客户端无需任何显式类型检查即可处理消息。

c# networking client-server game-development flatbuffers
1个回答
0
投票

FlatBuffer 的

union
功能非常适合对这种结构进行编码,并且无需存储或检查标识符字符串即可实现此目的。

© www.soinside.com 2019 - 2024. All rights reserved.