我正在寫一個遊戲服務器。採取多態性方法?
我有一個類叫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