/// <summary>
 /// Отображение данных о пользователе в "псевдо-консоль".
 /// </summary>
 /// <param name="myPacket"></param>
 public void ShowData(Client.MyPacketWrapper myPacket)
 {
     _ = Dispatcher.BeginInvoke(DispatcherPriority.Normal,
                                (ThreadStart) delegate()
     {
         WriteStatus("\nФИО: " + myPacket.UserDetails.FullName);
         WriteStatus("Название учебного заведения: " + myPacket.UserDetails.University);
         WriteStatus("Номер телефона: " + myPacket.UserDetails.Phone);
         WriteStatus("Документ, удостоверяющий личность загружен в папку 'DocsDirectory'.");
         WriteStatus("\nСоздайте логин и пароль, отправьте их пользователю...");
     }
                                );
 }
        /// <summary>
        /// Преоразование принятых данных.
        /// </summary>
        /// <param name="pathToFile">Путь к файлу.</param>
        /// <returns>Объект, представляющий файл и информацию о пользователе.</returns>
        public Client.MyPacketWrapper DeserializeData(string pathToFile)
        {
            byte[] buffer = File.ReadAllBytes(pathToFile);

            MemoryStream ms = new MemoryStream();               // проверка на количество доступной памяти

            ms.Write(buffer, 0, buffer.Length);                 // запись данных (buffer) в поток памяти
            BinaryFormatter serializer = new BinaryFormatter(); // получение объекта

            ms.Position = 0;                                    // обязательно для корректного счета с начала
            Client.MyPacketWrapper myPacket = (Client.MyPacketWrapper)serializer.Deserialize(ms);

            ms.Close();

            WriteStatus("----------\nПреобразование данных завершено, размер полученного объема данных: " + buffer.Length + " байт");

            return(myPacket);
        }
        /// <summary>
        /// Сохранение принятого бинарника.
        /// </summary>
        /// <param name="myPacket">Объект, представляющий собой пакет с данными.</param>
        /// <param name="clientNum">Номер клиента.</param>
        public void SaveData(Client.MyPacketWrapper myPacket, int clientNum)
        {
            try
            {
                string path = baseDir + "Пользователь №" + clientNum;

                if (!Directory.Exists(path))
                {
                    _ = Directory.CreateDirectory(path); // создание директории
                }

                string pathToFile = path + @"\" + myPacket.FileName;
                File.WriteAllBytes(pathToFile, myPacket.FileBuff);
            }
            catch (Exception exc)
            {
                _ = MessageBox.Show(exc.Message, "Ошибка!");
            }
        }
        /// <summary>
        /// Получение данных, запись их в бинарный файл
        /// </summary>
        /// <param name="ar">Представляет собой состояние асинхронной операции.</param>
        public void ReadCallback(IAsyncResult ar)
        {
            StateObject state   = (StateObject)ar.AsyncState;
            Socket      handler = state.workSocket;

            try // проверка наличия связи (с помощью handler.EndReceive - SocketException)
            {
                int bytesRead = handler.EndReceive(ar);
                state.sizeReceived += bytesRead;

                if (bytesRead > 0)
                {
                    string currentPath = baseDir + "Data" + state.clientNum + ".bin";

                    BinaryWriter writer = new BinaryWriter(File.Open(currentPath, FileMode.Append));

                    writer.Write(state.buffer, 0, bytesRead);
                    writer.Close();

                    if (state.sizePacket != state.sizeReceived) // принятие до совпадения размеров
                    {
                        _ = handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);
                    }
                    else
                    {
                        Client.MyPacketWrapper myPacket = DeserializeData(currentPath);

                        WriteStatus("Данные пользователя №" + state.clientNum + " получены.");

                        SaveData(myPacket, state.clientNum);
                        ShowData(myPacket);
                    }
                }
            }
            catch (Exception exc)
            {
                _ = MessageBox.Show("Потеряна связь при приеме данных! " + exc.Message, "Ошибка!");
            }
        }