2013-07-15 36 views
0

我一直在努力學習一款小遊戲。 該遊戲的目的是它將在線,但我有一些麻煩,如何序列化從服務器發送到客戶端的命令。 有很多不同的命令可以發送,手動處理這些令我瘋狂。目前我正在使用很多'ifs'來做到這一點,但我希望有一個可以幫助的設計模式。 我想用不同種類的對象解開消息,這樣我就可以從某種隊列中得到它們,並有效地對待它們......但是我想要部分或全部自動完成。什麼是序列化遠程命令的好方法?

解決這類問題有沒有好的做法?如果它也很高效,這將是一件好事。

在此先感謝。 PS:雖然這是一個概念性問題,但我使用的是C++,因此某些特定的解決方案也可以。

回答

1

嘗試工廠模式。 along these lines是一種有用的工廠模型。

創建一個基類,該基類提供串行化和反串行化流中數據的方法,並在工廠中通過名稱或其他標識符註冊派生類型。

您可以用一個頭文件打包一個命令,該頭文件告訴接收器要創建什麼類型。當你閱讀一個命令時,你要求工廠創建正確的類型。然後可以調用返回的類型來對其數據進行反序列化。

在這裏,我假設一些命令有額外的數據。

將命令彈出隊列進行處理後,可以調用它的'Execute'方法。

1

有一種稱爲「演員」的設計模式,這可能是你想要的。特徵:

  1. 自然和簡化的併發模型。

  2. 可以與消息上的模式匹配一​​起使用(消除「ifs」)。

語言「斯卡拉」爲這種設計模式提供了良好的支持,並完全滿足您的需求。但是,我不知道C++中是否有類似的解決方案。

+0

演員模型很容易實現。看看https://github.com/rfqu/CodeSamples/tree/master/src/simpleactor有多簡單。它用java編寫,但可以用C++輕鬆重寫。它需要一個Executor,它只是一個線程池,而https://www.google.com/search?q=thread+pool+c%2B%2B表明C++中有很多線程池實現。 –

相關問題