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); } }
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); } }
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(); } }
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; } }
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()); }