浏览代码

Code review

Simeon Manolov 1 年之前
父节点
当前提交
5b6bc10131
共有 2 个文件被更改,包括 12 次插入11 次删除
  1. 11 10
      client/ServerRunner.cpp
  2. 1 1
      lib/network/NetworkServer.cpp

+ 11 - 10
client/ServerRunner.cpp

@@ -23,28 +23,29 @@
 ServerThreadRunner::ServerThreadRunner() = default;
 ServerThreadRunner::~ServerThreadRunner() = default;
 
-uint16_t ServerThreadRunner::start(uint16_t port, bool connectToLobby, std::shared_ptr<StartInfo> startingInfo)
+uint16_t ServerThreadRunner::start(uint16_t cfgport, bool connectToLobby, std::shared_ptr<StartInfo> startingInfo)
 {
-	server = std::make_unique<CVCMIServer>(port, true);
+	// cfgport may be 0 -- the real port is returned after calling prepare()
+	server = std::make_unique<CVCMIServer>(cfgport, true);
 
 	if (startingInfo)
 	{
 		server->si = startingInfo; //Else use default
 	}
 
-	uint16_t srvport = port;
+	std::promise<uint16_t> promise;
 
-	threadRunLocalServer = boost::thread([this, connectToLobby, &srvport]{
+	threadRunLocalServer = boost::thread([this, connectToLobby, &promise]{
 		setThreadName("runServer");
-		srvport = server->prepare(connectToLobby);
+		std::this_thread::sleep_for(std::chrono::seconds(5));
+		uint16_t port = server->prepare(connectToLobby);
+		promise.set_value(port);
 		server->run();
 	});
 
-	while(srvport == 0) {
-		logNetwork->trace("Waiting for server port...");
-		boost::this_thread::sleep(boost::posix_time::milliseconds(100));
-		logNetwork->debug("Server port: %d", srvport);
-	}
+	logNetwork->trace("Waiting for server port...");
+	auto srvport = promise.get_future().get();
+	logNetwork->debug("Server port: %d", srvport);
 
 	return srvport;
 }

+ 1 - 1
lib/network/NetworkServer.cpp

@@ -21,7 +21,7 @@ NetworkServer::NetworkServer(INetworkServerListener & listener, const std::share
 
 uint16_t NetworkServer::start(uint16_t port)
 {
-	acceptor = std::make_shared<NetworkAcceptor>(*io, boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string("127.0.0.1"), port));
+	acceptor = std::make_shared<NetworkAcceptor>(*io, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port));
 	return startAsyncAccept();
 }