static async Task RunBot()

in #U5b9e#U8df5#U9879#U76ee/2019_MSC_#U9ec4#U91d1#U70b9/#U5fae#U8f6f#U9ec4#U91d1#U70b9#U7a0b#U5e8f#U5de5#U5177/OnlineGame/BotDemoInCSharp/BotDemo/Program.cs [65:179]


        static async Task RunBot(int roomId)
        {
            GoldenNumberService service = new GoldenNumberService(new HttpClient());
            service.BaseUrl = "https://goldennumber.aiedu.msra.cn";

            try
            {
                var userInfoFile = "userinfo.txt";
                var userId = string.Empty;
                var nickName = string.Empty;

                try
                {
                    // Use an exist player
                    var userInfo = File.ReadAllText(userInfoFile).Split(',');
                    userId = userInfo[0];
                    nickName = userInfo[1];

                    Console.WriteLine($"Use an exist player: {nickName}  Id: {userId}");
                }
                catch (Exception)
                {
                    // Create a new player
                    var user = await service.NewUserAsync($"AI Player {new Random().Next() % 10000}");
                    userId = user.UserId;
                    nickName = user.NickName;
                    Console.WriteLine($"Create a new player: {nickName}  Id: {userId}");

                    File.WriteAllText(userInfoFile, $"{userId},{nickName}");
                }

                Console.WriteLine($"Room id: {roomId}");

                while (true)
                {
                    // Get the room state
                    var state = await service.StateAsync(userId, roomId);

                    if (state.State == 2)
                    {
                        Console.WriteLine($"The game has finished");
                        break;
                    }

                    if (state.State == 1)
                    {
                        Console.WriteLine($"The game has not started, query again after 1 second");
                        await Task.Delay(1000);
                        continue;
                    }

                    if (state.HasSubmitted)
                    {
                        Console.WriteLine($"Already submitted this round, wait for next round");
                        if (state.MaxUserCount == 0)
                        {
                            await Task.Delay((state.LeftTime + 1) * 1000);
                        }
                        else
                        {
                            // One round can be finished when all players submitted their numbers if the room have set the max count of users, need to check the state every second.
                            await Task.Delay(1000);
                        }
                        continue;
                    }

                    Console.WriteLine($"\r\nThis is round {state.FinishedRoundCount + 1}");

                    // Get history of golden numbers
                    var todayGoldenList = await service.TodayGoldenListAsync(roomId);

                    if (todayGoldenList.GoldenNumberList.Count != 0)
                    {
                        Console.WriteLine($"Last golden number is: {todayGoldenList.GoldenNumberList.Last()}");
                    }

                    // Predict
                    var numbers = GeneratePredictionNumbers(todayGoldenList.GoldenNumberList.ToList(), state.Numbers);
                    double number1 = numbers.Item1;
                    double number2 = numbers.Item2;

                    // Submit prediction number
                    try
                    {
                        if (state.Numbers == 2)
                        {
                            await service.SubmitAsync(userId, state.RoundId.ToString(), number1.ToString(), number2.ToString());
                            Console.WriteLine($"You submit numbers: {number1},{number2}");
                        }
                        else
                        {
                            await service.SubmitAsync(userId, state.RoundId.ToString(), number1.ToString(), "0");
                            Console.WriteLine($"You submit number: {number1}");
                        }
                    }
                    catch (SwaggerException<BadRequestRspModel> ex)
                    {
                        Console.WriteLine($"Error: {ex.Result.Message}");
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"Error: {ex.Message}");
                    }
                }

            }
            catch (SwaggerException<BadRequestRspModel> ex)
            {
                Console.WriteLine($"Error: {ex.Result.Message}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error: {ex.Message}");
            }
        }