我一直在爲我的遊戲開發服務器代碼。它的功能非常好,但是90%的功能都在1類中。援助與代碼組織?
通常我很容易知道如何劃分東西。每個對象都是一個類,或者每個對話框都是一個類,併爲其子對象處理邏輯。
在這種情況下,服務器收到一個請求,然後告訴其他玩家或進程並通知相應的玩家。
這裏是頭文件:
class ServerCore : public ServerHost, public NetEventListener,
public ServerEventProvider
{
NetEventDecoder m_dec;
NetEventEncoder m_enc;
LoginManager m_login;
ServerPlayerManager m_playerMan;
ServerTableManager m_tableMan;
void sendToTarget();
void sendToAllActive();
void sendToActiveNotTarget();
void sendToTable(int tableNo);
public:
ServerCore();
virtual void onConnect (Lacewing::Server::Client &client);
virtual void onDisconnect (Lacewing::Server::Client &client);
virtual void onError (Lacewing::Error &error);
virtual void onReceive (Lacewing::Server::Client &client, char * data, int size);
virtual void sendChatMessageC(const std::string& message,ChatAreaEnum area);
virtual void requestTableC(int tableNo, int seatNo);
virtual void playerRequestSitC(int tableNumber, int seatNumber);
virtual void playerStoodUpC();
virtual void hostGameC(const SpadesGameInfo& info);
virtual void gameMessageC(SpadesCSMessageEnum message, const std::vector<int>& params);
virtual void modifyListC(const std::string& player, GroupTypeEnum group, bool add);
virtual void canceledHostingRequestC();
virtual void sendInviteC(int tableNo, const std::string& player);
virtual void loginResult(const std::string& name, ServerPlayer* player,
const std::string& sessionID, bool success, bool newSession);
virtual void readyToReceiveLobbyDataC();
virtual void playerAbandonedGameC();
virtual void watchTableC(int tableNo);
virtual void gameCompleted(int tableId);
virtual void playerWantsPlayAgainC();
virtual ~ServerCore(void);
};
}
我真的不知道我怎麼能打破這種分解成更小的類。它們執行的任務交給其他對象,如身份驗證和數據庫中的數據檢索,但所有事件當前都在這1個文件中處理。
網絡事件解碼器在通過線路接收到的字符串轉換網絡事件解碼器後調用相應的方法。
這樣做的效果很好,但遊戲會變得更大,我希望保持清潔和模塊化。
這個設計是個好主意嗎?如果不是,遊戲服務器開發中通常使用什麼類型的模式來保持事物更加面向對象?
感謝