Пример #1
0
        } // GetResponse

        // Проверяет сериализуемость объекта
        private bool ValidateBinary(MemoryStream memoryStream)
        {
            try {
                ChatMessage.FromArray(memoryStream.ToArray());
                return true;
            } catch (Exception) {
                return false;
            } // try-catch
        } // ValidateBinary
Пример #2
0
        } // ValidateBinary
        

        private void ServerDoListen(object client)
        {
            // Получить поток для передачи информации
            using (NetworkStream netStream = (client as TcpClient)?.GetStream()) {
                while (true) {
                    if (netStream.CanRead) {
                        byte[] response;

                        try {
                            // Получаем ответ от клиента
                            response = GetResponse(netStream);

                            // Десериализуем сообщение
                            ChatMessage msg = ChatMessage.FromArray(response);

                            // Определяем тип сообщения
                            switch (msg.Type) {
                                // Если был отправлен текст - выводим его в окно чата
                                case MessageType.Text:
                                    SendTextToListBox($"{msg.UserFrom}: {msg.Message}");
                                    break;

                                // Если был отправлен файл - предлагаем его сохранить
                                case MessageType.File:
                                    // Получаем данные о файле
                                    NetFile f = msg.File;

                                    // Предлагаем сохранить его
                                    DialogResult saveFile = MessageBox.Show($"The client sent a file.\n\"{f.FileName}{f.Extension}\"\nSave it?",
                                        "File from the client", MessageBoxButtons.YesNo);

                                    // Если да - сохраняем
                                    if (saveFile == DialogResult.Yes)
                                        SaveFile(f);
                                    break;
                            } // switch
                        } catch (Exception ex) {
                            MessageBox.Show($"The server will be stopped\n{ex.Message}", 
                                "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            listViewConnectedClients.Items.Clear();
                            _listener.Stop();
                            break;
                        } // try-catch
                    } // if
                } // while
            } // using
        } // ServerDoListen
Пример #3
0
        } // ValidateBinary


        void ClientDoListen(object client)
        {
            SendTextToListBox($"Connection with server {textBoxHostName.Text}:{textBoxPort.Text} opened");

            using (NetworkStream netStream = (client as TcpClient)?.GetStream()) {
                while (true) {
                    if (netStream.CanRead) {
                        byte[] response;

                        try {
                            // Получаем ответ от клиента
                            response = GetResponse(netStream);

                            // Десериализуем сообщение
                            ChatMessage msg = ChatMessage.FromArray(response);

                            // Определяем тип сообщения
                            switch (msg.Type) {
                                // Если был отправлен текст - выводим его в окно чата
                                case MessageType.Text:
                                    SendTextToListBox($"{msg.UserFrom}: {msg.Message}");
                                    break;

                                // Если был отправлен файл - предлагаем его сохранить
                                case MessageType.File:
                                    // Получаем данные о файле.
                                    NetFile f = msg.File;

                                    // Предлагаем сохранить его.
                                    DialogResult saveFile = MessageBox.Show($"You have been sent a file. \"{f.FileName}{f.Extension}\"\nSave it?",
                                        "File from the server", MessageBoxButtons.YesNo);

                                    // Если да - сохраняем
                                    if (saveFile == DialogResult.Yes)
                                        SaveFile(f);
                                    break;
                            } // switch
                        } catch (Exception) {
                            SendTextToListBox($"Connection with server {textBoxHostName.Text}:{textBoxPort.Text} closed");
                            break;
                        } // try-catch
                    } // if
                } // while
            } // using
        } // ClientDoListen