| @@ -249,10 +249,13 @@ void Communication::AddPlayer(int64_t playerID, THUAI6::PlayerType playerType, T | |||||
| grpc::ClientContext context; | grpc::ClientContext context; | ||||
| auto MessageReader = THUAI6Stub->AddPlayer(&context, playerMsg); | auto MessageReader = THUAI6Stub->AddPlayer(&context, playerMsg); | ||||
| while (MessageReader->Read(&message2Client)) | |||||
| protobuf::MessageToClient buffer2Client; | |||||
| while (MessageReader->Read(&buffer2Client)) | |||||
| { | { | ||||
| { | { | ||||
| std::lock_guard<std::mutex> lock(mtxMessage); | std::lock_guard<std::mutex> lock(mtxMessage); | ||||
| message2Client = std::move(buffer2Client); | |||||
| haveNewMessage = true; | haveNewMessage = true; | ||||
| } | } | ||||
| cvMessage.notify_one(); | cvMessage.notify_one(); | ||||
| @@ -3,7 +3,7 @@ | |||||
| python_dir=/usr/local/PlayerCode/CAPI/python/PyAPI | python_dir=/usr/local/PlayerCode/CAPI/python/PyAPI | ||||
| playback_dir=/usr/local/playback | playback_dir=/usr/local/playback | ||||
| nice -10 ./Server --port 8888 --studentCount 4 --trickerCount 1 --gameTimeInSecond 600 --url $URL --token $TOKEN --fileName $playback_dir/video > $playback_dir/server.log & | |||||
| nice -10 ./Server --port 8888 --studentCount 4 --trickerCount 1 --gameTimeInSecond 600 --url $URL --token $TOKEN --fileName $playback_dir/video --startLockFile $playback_dir/start.lock > $playback_dir/server.log & | |||||
| server_pid=$! | server_pid=$! | ||||
| sleep 5 | sleep 5 | ||||
| for k in {1..2} | for k in {1..2} | ||||
| @@ -39,12 +39,20 @@ do | |||||
| popd | popd | ||||
| done | done | ||||
| ps -p $server_pid | |||||
| while [ $? -eq 0 ] | |||||
| do | |||||
| sleep 1 | |||||
| ps -p $server_pid | |||||
| done | |||||
| sleep 10 | |||||
| touch $playback_dir/finish.lock | |||||
| echo "Finish" | |||||
| if [ -f $playback_dir/start.lock ]; then | |||||
| ps -p $server_pid | |||||
| while [ $? -eq 0 ] | |||||
| do | |||||
| sleep 1 | |||||
| ps -p $server_pid | |||||
| done | |||||
| touch $playback_dir/finish.lock | |||||
| echo "Finish" | |||||
| else | |||||
| echo "Failed to start game." | |||||
| touch temp.lock | |||||
| mv -f temp.lock $playback_dir/video.thuaipb | |||||
| kill -9 $server_pid | |||||
| fi | |||||
| @@ -71,5 +71,8 @@ namespace Server | |||||
| [Option("resultFileName", Required = false, HelpText = "Result file name, saved as .json")] | [Option("resultFileName", Required = false, HelpText = "Result file name, saved as .json")] | ||||
| public string ResultFileName { get; set; } = DefaultArgumentOptions.FileName; | public string ResultFileName { get; set; } = DefaultArgumentOptions.FileName; | ||||
| [Option("startLockFile", Required = false, HelpText = "Whether to create a file that identifies whether the game has started")] | |||||
| public string StartLockFile { get; set; } = DefaultArgumentOptions.FileName; | |||||
| } | } | ||||
| } | } | ||||
| @@ -45,6 +45,7 @@ namespace Server | |||||
| if (id == GameObj.invalidID) return; //如果有未初始化的玩家,不开始游戏 | if (id == GameObj.invalidID) return; //如果有未初始化的玩家,不开始游戏 | ||||
| } | } | ||||
| Console.WriteLine("Game starts!"); | Console.WriteLine("Game starts!"); | ||||
| CreateStartFile(); | |||||
| game.StartGame((int)options.GameTimeInSecond * 1000); | game.StartGame((int)options.GameTimeInSecond * 1000); | ||||
| Thread.Sleep(1); | Thread.Sleep(1); | ||||
| new Thread(() => | new Thread(() => | ||||
| @@ -74,6 +75,16 @@ namespace Server | |||||
| }) | }) | ||||
| { IsBackground = true }.Start(); | { IsBackground = true }.Start(); | ||||
| } | } | ||||
| public void CreateStartFile() | |||||
| { | |||||
| if (options.StartLockFile != DefaultArgumentOptions.FileName) | |||||
| { | |||||
| using var _ = File.Create(options.StartLockFile); | |||||
| Console.WriteLine("Successfully Created StartLockFile!"); | |||||
| } | |||||
| } | |||||
| public void WaitForEnd() | public void WaitForEnd() | ||||
| { | { | ||||
| this.endGameSem.Wait(); | this.endGameSem.Wait(); | ||||