private void ConnectButton_Click(object sender, RoutedEventArgs e) { if (Connected) { // отключиться Command command = new Command(Constants.EndCommand, NetworkOperator.ClientToken); NetworkOperator.SendCommand(NetworkOperator.ServerAddress, NetworkOperator.ServerPort, command); ConnectButton.Content = "Подключиться"; ServerAddress.IsEnabled = true; Connected = false; ConnectionIndicator.Fill = Brushes.Red; // лучше отключить принимающий поток здесь, в основном потоке // предотвращает появление труднообъяснимой ошибки // для этого пришлось сделать поток доступным извне NetworkOperator NetworkOperator.clientReceiver.Stop(); } else { // соединиться Command command = new Command(Constants.HelloCommand, new Message(ClientNameTextBox.Text), null); //передача отображаемого имени клиента ClientNameTextBox.IsEnabled = false; if (NetworkOperator.ClientToken != null) { command.ClientToken = NetworkOperator.ClientToken; } try { NetworkOperator.ServerAddress = ServerAddress.Text.Split(':')[0]; NetworkOperator.ServerPort = int.Parse(ServerAddress.Text.Split(':')[1]); } catch { MessageBox.Show("Некорректный порт"); return; } bool success = NetworkOperator.SendCommand(NetworkOperator.ServerAddress, NetworkOperator.ServerPort, command); if (success) { ConnectButton.Content = "Отключиться"; ServerAddress.IsEnabled = false; Connected = true; ConnectionIndicator.Fill = Brushes.Green; // сделать индикатор зеленым // клиент запрашивает последние сообщения Command requestLastMessagesCommand = new Command(Constants.Get10MessagesCommand, NetworkOperator.ClientToken); NetworkOperator.SendCommand(NetworkOperator.ServerAddress, NetworkOperator.ServerPort, requestLastMessagesCommand); } else { Connected = false; ConnectionIndicator.Fill = Brushes.Red; // сделать индикатор красным } } }
private void SendMessage() { if (MessageTextBox.Text == "") { return; } Command command = new Command(Constants.MessageTransferCommand, new Message(MessageTextBox.Text), NetworkOperator.ClientToken); bool success = NetworkOperator.SendCommand(NetworkOperator.ServerAddress, NetworkOperator.ServerPort, command); if (!success) { ConnectionIndicator.Fill = Brushes.Red; // ошибка отправки } MessageTextBox.Text = ""; MessageTextBox.Focus(); }