Exemple #1
0
 public static bool CheckDispatcherIsAlive(int index)
 {
     try
     {
         var channel = GrpcChannel.ForAddress(Model.Config.DispatcherList[index]);
         var client  = new GodvilleServiceClient(channel);
         client.Check(new Empty {
         }, deadline: DateTime.UtcNow.AddSeconds(5));
         return(true);
     }
     catch (Exception)
     { // диспетчер недоступен, ничего не делаем
         return(false);
     }
 }
Exemple #2
0
 void StatisticReader()
 {
     try
     {
         GrpcChannel channel   = Connection.GetDispatcherChannel();
         var         client    = new GodvilleServiceClient(channel);
         var         statistic = client.GetStatistic(new ClientId {
             Id = Program.Client.Id
         });
         MessageBox.Show(string.Format("Всего побед: {0}, поражений: {1}", statistic.Wins, statistic.Loses));
     }
     catch (Exception e)
     {
         MessageBox.Show("Простите, статистика временно не может быть получена");
         Logger.AddErrorMessage(e.Message);
     }
 }
Exemple #3
0
 private void linkLogout_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
 {
     try
     {
         var channel = Connection.GetDispatcherChannel();
         var client  = new GodvilleServiceClient(channel);
         client.Logout(new ClientId {
             Id = Program.Client.Id
         });
         Program.Client.ClearClientData();
     }
     catch (Exception ex)
     {
         Logger.AddErrorMessage(ex.Message);
         MessageBox.Show("Операция временно недоступна");
         return;
     }
     if (e != null)
     {
         Close();
     }
 }
Exemple #4
0
        void ReadClientMsg()
        {
            string serverIp;

            try
            {
                GrpcChannel channel = Connection.GetDispatcherChannel();
                var         client  = new GodvilleServiceClient(channel);
                serverIp = client.StartDuel(new ClientId {
                    Id = Program.Client.Id
                }).Ip;
            }
            catch (Exception e)
            {
                //Выбранный диспетчер вдруг умер после проверки на активность
                Logger.AddErrorMessage(e.Message);
                MessageBox.Show("Дуэль не может быть начата");
                return;
            }

            //заглушка
            serverIp = "127.0.0.1:8017";

            var    lines  = serverIp.Split(":");
            int    port   = int.Parse(lines[1]);
            string server = lines[1];

            try
            {
                using (TcpClient tcpClient = new TcpClient(lines[0], port))
                {
                    NetworkStream networkStream = tcpClient.GetStream();
                    StreamReader  sr            = new StreamReader(networkStream);
                    StreamWriter  sw            = new StreamWriter(networkStream);
                    WriteStream.WriteNetworkStream = networkStream;
                    sr.BaseStream.ReadTimeout      = 20 * 1000;
                    sw.WriteLine(Program.Client.Id.ToString());
                    sw.Flush();

                    string input;
                    ToggleDuelState(true);
                    while (true)
                    {
                        Model.ClientMsg clientMsg;
                        try
                        {
                            if ((input = sr.ReadLine()) != null)
                            {
                                clientMsg = JsonConvert.DeserializeObject <Model.ClientMsg>(input);
                            }
                            else
                            {
                                continue;
                            }
                        }
                        catch (IOException e)
                        {
                            MessageBox.Show("Дуэль была прервана обстоятельствами, теперь вы можете найти ее в статистике");
                            Logger.AddErrorMessage(e.Message);
                            ToggleDuelState(false);
                            return;
                        }
                        if (clientMsg != null)
                        {
                            bool isHodEven = clientMsg.HodNum % 2 == 0;

                            if (clientMsg.Type != 4)
                            {
                                ToggleMyHod(isHodEven);
                            }

                            if (clientMsg.Type == 4)
                            {
                                lblEnemyName.SetPropertyThreadSafe(() => lblEnemyName.Text, clientMsg.EnemyName);
                            }

                            TestFormControlHelper.ControlInvoke(lvDuelHistory, () => lvDuelHistory.Items.Add(clientMsg.Phrase));
                            if (clientMsg.Glas != -1 && clientMsg.Type != 4)
                            {
                                string glasMsg;
                                if (isHodEven) // в ход клиента приходит глас от противника
                                {
                                    glasMsg = clientMsg.Glas == 0 ?
                                              "Противник сделал плохо. Ваше здоровье уменьшилось" :
                                              "Противник сделал хорошо. Его герой вылечился";
                                }
                                else // в ход противника видим глас с нашего прошлого хода (если сработал)
                                {
                                    glasMsg = clientMsg.Glas == 0 ?
                                              "Вы сделали плохо. Здоровье противника уменьшилось" :
                                              "Вы сделали хорошо. Ваш герой подлатал раны";
                                }
                                TestFormControlHelper.ControlInvoke(lvDuelHistory, () => lvDuelHistory.Items.Add(glasMsg));
                                TestFormControlHelper.ControlInvoke(
                                    lvDuelHistory,
                                    () => lvDuelHistory.Items[lvDuelHistory.Items.Count - 1].BackColor = Color.PeachPuff);
                            }

                            TestFormControlHelper.ControlInvoke(lvDuelHistory, () => lvDuelHistory.EnsureVisible(lvDuelHistory.Items.Count - 1));
                            lblEnemyHealth.SetPropertyThreadSafe(() => lblEnemyHealth.Text, clientMsg.EnemyLives.ToString());
                            lblYourHealth.SetPropertyThreadSafe(() => lblYourHealth.Text, clientMsg.Lives.ToString());
                            if (clientMsg.Type == 0)
                            {
                                MessageBox.Show("Дуэль завершена, теперь вы можете найти ее в статистике");
                                ToggleDuelState(false);
                                return;
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Дуэль закончилась, не начавшись: ваш противник внезано провалился сквозь землю");
                Logger.AddErrorMessage(e.Message);
                return;
            }
        }
Exemple #5
0
        static void Main()
        {
            Application.SetHighDpiMode(HighDpiMode.SystemAware);
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Client.TryGetClient();
            Model.LoginData loginData = new Model.LoginData();
            while (Client.Id == -1)
            {
                LoginForm    loginForm = new LoginForm(loginData);
                DialogResult result    = loginForm.ShowDialog();
                // логин
                if (result == DialogResult.OK)
                {
                    UserLoginOuput userLoginOutput;
                    try
                    {
                        using var channel = Connection.GetDispatcherChannel();
                        var serviceClient = new GodvilleServiceClient(channel);
                        userLoginOutput = serviceClient.Login(
                            new LoginData
                        {
                            Login    = loginData.Login,
                            Password = loginData.Password,
                        });
                    }
                    catch (Exception e)
                    {
                        Logger.AddErrorMessage(e.Message);
                        MessageBox.Show("Что-то пошло не так");
                        return;
                    }

                    if (userLoginOutput.Id == -1)
                    {
                        MessageBox.Show("Неверное имя пользователя или пароль");
                    }
                    else
                    {
                        Client.Id         = userLoginOutput.Id;
                        Client.Nickname   = userLoginOutput.Nickname;
                        Client.CountLives = userLoginOutput.HealthCount;
                        Client.HeroName   = userLoginOutput.HeroName;
                        Client.SetClientData();
                    }
                }
                // регистрация
                else if (result == DialogResult.Ignore)
                {
                    Model.RegisterData regData = new Model.RegisterData();
                    RegisterForm       rf      = new RegisterForm(regData);
                    if (rf.ShowDialog() == DialogResult.OK)
                    {
                        UserRegOutput userRegOutput;
                        try
                        {
                            using var channel = Connection.GetDispatcherChannel();
                            var serviceClient = new GodvilleServiceClient(channel);
                            userRegOutput = serviceClient.Register(
                                new RegisterData
                            {
                                LoginData = new LoginData {
                                    Login = regData.Login, Password = regData.Password
                                },
                                Nickname = regData.Nickname,
                                Heroname = regData.HeroName
                            });
                        } catch (Exception e)
                        {
                            MessageBox.Show("Что-то пошло не так");
                            Logger.AddErrorMessage(e.Message);
                            return;
                        }

                        if (userRegOutput.Id == -1)
                        {
                            MessageBox.Show("Логин занят, выберите другой");
                        }
                        else
                        {
                            Client.Id         = userRegOutput.Id;
                            Client.Nickname   = userRegOutput.Nickname;
                            Client.CountLives = Client.GetLivesCount();
                            Client.HeroName   = regData.HeroName;
                            Client.SetClientData();
                        }
                    }
                    else
                    {
                        return;
                    }
                }
                // завершение работы
                else if (result == DialogResult.Cancel)
                {
                    return;
                }
            }
            Application.Run(new StartForm());
        }