예제 #1
0
        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;
                    // сделать индикатор красным
                }
            }
        }
예제 #2
0
        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();
        }