瀏覽代碼

Create fake server on stack to instead of persistent member to eliminate
state

Ivan Savenko 4 月之前
父節點
當前提交
3d05644601
共有 2 個文件被更改,包括 5 次插入5 次删除
  1. 4 3
      client/AntilagServer.cpp
  2. 1 2
      client/AntilagServer.h

+ 4 - 3
client/AntilagServer.cpp

@@ -111,7 +111,7 @@ bool AntilagReplyPredictionVisitor::canBeApplied() const
 }
 
 AntilagServer::AntilagServer(INetworkHandler & network, const std::shared_ptr<CGameState> & gs)
-	: gameHandler(std::make_unique<CGameHandler>(*this, gs))
+	: gameState(gs)
 {
 	antilagNetConnection = network.createAsyncConnection(*this);
 	antilagGameConnection = std::make_shared<GameConnection>(antilagNetConnection);
@@ -146,7 +146,8 @@ void AntilagServer::onPacketReceived(const std::shared_ptr<INetworkConnection> &
 
 	try
 	{
-		gameHandler->handleReceivedPack(GameConnectionID::FIRST_CONNECTION, *serverPack);
+		CGameHandler gameHandler(*this, gameState);
+		gameHandler.handleReceivedPack(GameConnectionID::FIRST_CONNECTION, *serverPack);
 	}
 	catch (const AntilagRollbackNotSupportedException & )
 	{
@@ -256,7 +257,7 @@ bool AntilagServer::hasBothPlayersAtSameConnection(PlayerColor left, PlayerColor
 
 void AntilagServer::applyPack(CPackForClient & pack)
 {
-	AntilagRollbackGeneratorVisitor visitor(gameHandler->gameState());
+	AntilagRollbackGeneratorVisitor visitor(*gameState);
 	pack.visit(visitor);
 	if (!visitor.canBeRolledBack())
 	{

+ 1 - 2
client/AntilagServer.h

@@ -187,8 +187,7 @@ class AntilagServer final : public IGameServer, public INetworkConnectionListene
 	std::vector<AntilagReplyPrediction> predictedReplies;
 	std::shared_ptr<INetworkConnection> antilagNetConnection;
 	std::shared_ptr<GameConnection> antilagGameConnection;
-//	std::shared_ptr<CGameState> & gameState;
-	std::unique_ptr<CGameHandler> gameHandler;
+	std::shared_ptr<CGameState> gameState;
 
 	static constexpr uint32_t invalidPackageID = std::numeric_limits<uint32_t>::max();
 	uint32_t currentPackageID = invalidPackageID;