我在将游戏网络通信从发送 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
),以便客户端无需任何显式类型检查即可处理消息。
FlatBuffer 的
union
功能非常适合对这种结构进行编码,并且无需存储或检查标识符字符串即可实现此目的。