コード例 #1
0
 /// <summary>
 /// Отображает данные о пользователе в псевдоконсоль
 /// </summary>
 /// <param name="myPacket"></param>
 public void ShowData(MyClient.MyPacketWrapper myPacket)
 {
     this.Dispatcher.BeginInvoke
         (DispatcherPriority.Normal,
         (ThreadStart) delegate()
     {
         ConsoleTextBox.Text += "ФИО: " + myPacket.UserDetails.FullName + "\r\n";
         ConsoleTextBox.Text += "Название учебного заведения: " + myPacket.UserDetails.University + "\r\n";
         ConsoleTextBox.Text += "Номер телефона: " + myPacket.UserDetails.Phone + "\r\n";
     }
         );
 }
コード例 #2
0
        /// <summary>
        /// Сохраняем принятый бинарник
        /// </summary>
        /// <param name="myPacket">Объект, представляющий пакет с данными</param>
        /// <param name="clientNum">Номер клиента</param>
        public void SaveData(MyClient.MyPacketWrapper myPacket, int clientNum)
        {
            try
            {
                string path = baseDir + "Client" + 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);
            }
        }
コード例 #3
0
        /// <summary>
        /// Десериализуем наши принятые данные
        /// </summary>
        /// <param name="pathToFile">Путь к файлу</param>
        /// <returns>Объект, представляющий наш файл + информацию о пользователе</returns>
        public MyClient.MyPacketWrapper DeserializeData(string pathToFile)
        {
            byte[] buffer = File.ReadAllBytes(pathToFile);
            //можно делать проверку на количество доступной памяти
            MemoryStream ms = new MemoryStream();

            // Записываем наши данные(buffer) в поток памяти
            ms.Write(buffer, 0, buffer.Length);

            BinaryFormatter serializer = new BinaryFormatter();

            //получаем наш объект
            ms.Position = 0;//!! обязательно, чтобы корректно считать с начала
            MyClient.MyPacketWrapper myPacket = (MyClient.MyPacketWrapper)serializer.Deserialize(ms);

            ms.Close();

            WriteStatus("Deserialization completed, size receive byte: " + buffer.Length);

            return(myPacket);
        }
コード例 #4
0
        /// <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
                    {
                        WriteStatus("File was received");

                        MyClient.MyPacketWrapper myPacket = DeserializeData(currentPath);
                        SaveData(myPacket, state.clientNum);
                        ShowData(myPacket);
                    }
                }
            }
            catch (Exception exc)
            {
                MessageBox.Show("Пропала связь при приеме данных. Error: " + exc.Message);
            }
        }