我正在写一个游戏服务器。采取多态性方法?
我有一个类叫NetMessage
。该类用作通过网络发送的字节数组之间的中间值。
当服务器接收到字节数组时,它将其更改回NetMessage
并列出这些列表,并将其交给经理。
NetMessage
是一个抽象类,因此所有的消息都来自它,但是当数据到达GameManager
时,它可能必须对所获得的数据做大不相同的事情。
例如,NetMoveMessage
需要与NetConnectMessage
的处理方式不同。
此外,消息本身除了序列化自身之外没有任何方法,本身也不能改变状态。只有经理可以,所以他们基本上只是数据类。
现在决定如何处理数据,我只是简单地检查它是什么类型的消息。例如
NetMessage message = IncomingMessages.First.Value;
IncomingMessages.RemoveFirst();
if(message is NetConnectMessage)
{
//cool things here
}
else if(message is NetMoveMessage)
{
//Isn't this exciting?
}
这是不好的做法?有一个更好的方法吗?对我来说,考虑到消息没有做任何事情似乎很好,所以读取数据的唯一方法是确定需要阅读的数据,并相应地处理它。如果有一些明显的更好的方法,我很想念,但随时启发我。
的东西是消息不会做任何事情。所有的消息都包含数据,说明某件事想做什么。例如,移动消息实际上不能移动任何东西,因为它没有像玩家那样的信息来做类似的事情。服务器实际上是模拟这些事情,然后根据这些事件写出新消息发送出去。 –
啊,好吧。然后我不明白需要有消息类。 那么,无论你决定使用什么方法,它会回到if/else的某处(或者编写一个具有相同名称的方法,重载它们以接收每种类型消息的不同参数)。 – Vucko