/// <summary> /// Получение файлов от сервера (по пакетам) /// </summary> /// <param name="fileSize">Записываемый буффер</param> /// <param name="infoFile">Количество байт полученных от клиента</param> /// <param name="countRecByte">Размер пакета</param> internal static void ReceivedFile(FileSend file, byte[] infoFile, int countRecByte) { Buffer.BlockCopy(infoFile, 0, file.fileByte, file.bytesSend, countRecByte); SendMsgClient(16, 1007); }
} // Файл, который скачивается из сервера; /// <summary> /// Получение ответа от сервера /// </summary> /// <param name="soketClient">Сокет клиента</param> private static void GettingAnswerServer(object soketClient) { Socket soket = (Socket)soketClient; MemoryStream ms = new MemoryStream(new byte[2048], 0, 2048, true, true); BinaryReader reader = new BinaryReader(ms); try { while (true) { // Если файл пользователь отправлял файл, продолжить отправку файла в другом окне; if (fileSend != null) { ContinueSendFile(ref fileSend.bytesSend); } soket.Receive(ms.GetBuffer()); ms.Position = 0; int idOperation = reader.ReadInt32(); switch (idOperation) { case 1: #region Проверка данных на валидность (Connect 1) switch (reader.ReadBoolean()) { case true: Authorization.GoToPersonalArea(); break; case false: Authorization.thisWindow.Dispatcher.BeginInvoke(new ThreadStart(() => { Authorization.thisWindow.signIn.IsEnabled = true; MessageBox.Show("Неверный логин или пароль!"); })); break; } #endregion break; case 2: #region Проверка на повторяющийся логин (CheckDataUser 2) switch (reader.ReadBoolean()) { case true: MessageBox.Show("Регистрация прошла успешно!"); Authorization.CreateNewPerson(); break; case false: MessageBox.Show("Такой логин\\email уже существует!"); break; } #endregion break; case 3: #region Получение ответа от сервера насчёт данных о данном пользователе (CheckFullInfoOfPerson 3) if (reader.ReadBoolean()) { Person.thisUser.name = reader.ReadString(); Person.thisUser.lastname = reader.ReadString(); Person.thisUser.level = reader.ReadInt32(); Person.thisUser.likes = reader.ReadInt32(); Person.thisUser.image = reader.ReadString(); Person.thisUser.email = reader.ReadString(); Person.thisUser.countProject = Int32.Parse(reader.ReadString()); Person.thisUser.note = reader.ReadString(); Person.thisUser.countSub = Int32.Parse(reader.ReadString()); PersonalArea.SetPersonalInfo(); } else { Profile.profileUser.name = reader.ReadString(); Profile.profileUser.lastname = reader.ReadString(); Profile.profileUser.level = reader.ReadInt32(); Profile.profileUser.likes = reader.ReadInt32(); Profile.profileUser.image = reader.ReadString(); Profile.profileUser.email = reader.ReadString(); Profile.profileUser.countProject = Int32.Parse(reader.ReadString()); Profile.profileUser.note = reader.ReadString(); Profile.profileUser.countSub = Int32.Parse(reader.ReadString()); Profile.SetPanels(Profile.thisWindow, Profile.profileUser); } #endregion break; case 4: #region Проверка на наличие введенной почты в базе (CheckUnique 4) SendMailPass.thisWindow.ShowPanelCode(!reader.ReadBoolean()); #endregion break; case 5: #region Получение в изменении количества лайков на профиле пользователя от сервера MessageBox.Show("321"); #endregion break; case 6: #region Получение ответ от сервера по поводу отправки кода восстановления; SendMailPass.codeU = reader.ReadInt32(); #endregion break; case 7: #region Получение списка с категориями проекта YourProject.thisWindow.Dispatcher.BeginInvoke(new ThreadStart(() => { foreach (string item in reader.ReadString().Split('#').ToList()) { YourProject.thisWindow.comboBoxTypeProj.Items.Add(item); } YourProject.thisWindow.comboBoxTypeProj.Items.RemoveAt(YourProject.thisWindow.comboBoxTypeProj.Items.Count - 1); SendMsgClient(256, 9, Person.thisUser.login, (YourProject.thisWindow.listViewProjects.SelectedValue as Project.MyItemProject).nameProject); })); #endregion break; case 8: #region Получение информации о проекте (YouProject) YourProject.thisWindow.Dispatcher.BeginInvoke(new ThreadStart(() => { string nameProj = reader.ReadString(); string dateU = reader.ReadString(); double ratingU = double.Parse(reader.ReadString().Replace('.', ',')); int countVoteU = Int32.Parse(reader.ReadString()); string noteU = reader.ReadString(); string imageU = reader.ReadString(); YourProject.SetInfoForSettingsPanel(YourProject.thisWindow, nameProj, dateU, ratingU, countVoteU, noteU, imageU, Int32.Parse(reader.ReadString())); //YourProject.SetInfoForSettingsPanel(YourProject.thisWindow, reader.ReadString(), reader.ReadString(), // double.Parse(reader.ReadString().Replace('.', ',')), Int32.Parse(reader.ReadString()), // reader.ReadString(), reader.ReadString(), Int32.Parse(reader.ReadString())); YourProject.thisWindow.settingsPanel.Visibility = Visibility.Visible; })); #endregion break; #region абота с файлами (1000 - 2000) case 1001: #region Отправка файла серверу if (fileSend != null) { ContinueSendFile(ref fileSend.bytesSend); } #endregion break; case 1002: #region Получение списка проектов сохраненные на сервере; bool isThisUser = reader.ReadBoolean(); int idProject = reader.ReadInt32(); string name = reader.ReadString(); int countVote = reader.ReadInt32(); double rating = reader.ReadDouble(); string date = reader.ReadString(); string note = reader.ReadString(); string image = reader.ReadString(); string viewApplication = reader.ReadString(); if (isThisUser) { Person.thisUser.listProject.Add(new Project(idProject, name, countVote, rating, date, viewApplication, note, image)); } else { Profile.profileUser.listProject.Add(new Project(idProject, name, countVote, rating, date, viewApplication, note, image)); } #endregion break; case 1003: #region Получение свойств файла который будет отправлятся от сервера; fileReceiving = new FileSend(reader.ReadInt32(), reader.ReadString()); SendMsgClient(16, 1007); YourProject.IsEnabledForm(false); YourProject.SetSettingsPanelLoad(YourProject.thisWindow, fileReceiving.nameFile, false); #endregion break; case 1004: #region Получение пакетов файла; int countRecByte = reader.ReadInt32(); byte[] byteFile = reader.ReadBytes(countRecByte); ReceivedFile(fileReceiving, byteFile, countRecByte); fileReceiving.bytesSend += countRecByte; ///Отображение прогресса отправки if (YourProject.loadUIPB != null) { double percent = ((double)fileReceiving.bytesSend / fileReceiving.fileByte.Length) * 100; YourProject.SetValueProgressLoad((int)percent, true); } #endregion break; case 1005: #region Создание файла по полученным байтам; string nameFile = $"Project File\\{fileReceiving.nameFile}"; File.WriteAllBytes(nameFile, fileReceiving.fileByte); fileReceiving = null; #endregion break; case 1006: #region Добавление проекта в лист; YourProject.thisWindow.Dispatcher.BeginInvoke(new ThreadStart(() => { YourProject.AddProjectToList(Int32.Parse(reader.ReadString())); })); #endregion break; case 1007: #region Изменение имени у проекта YourProject.thisWindow.Dispatcher.BeginInvoke(new ThreadStart(() => { YourProject.RenameProject(reader.ReadString()); })); #endregion break; #endregion #region Новостная лента(2000-3000) case 2000: #region Поиск людей по введеной строке string loginUser = reader.ReadString(); if (!loginUser.Equals("###ThisNull###")) { string imageU = reader.ReadString(); int level = Int32.Parse(reader.ReadString()); int countProject = Int32.Parse(reader.ReadString()); FeedPublic.listSearchPeople.Add(new Person(loginUser, imageU, level, countProject)); } else { FeedPublic.thisWindow.Dispatcher.BeginInvoke(new ThreadStart(() => { FeedPublic.SetFindsPeople(FeedPublic.listSearchPeople); })); } #endregion break; case 2001: #region Получение списока проектов с лучшим рейтингом; loginUser = reader.ReadString(); if (!loginUser.Equals("###ThisNull###")) { string nameProj = reader.ReadString(); string imageU = reader.ReadString(); double ratingU = double.Parse(reader.ReadString().Replace('.', ',')); string noteU = reader.ReadString(); FeedPublic.listTopProject.Add(new Person(loginUser, new Project(new MyItemProject(nameProj, ratingU), imageU, noteU))); } else { FeedPublic.thisWindow.Dispatcher.BeginInvoke(new ThreadStart(() => { FeedPublic.SetTopProject(FeedPublic.listTopProject); SendMsgClient(128, 2002, Person.thisUser.login); })); } #endregion break; case 2002: #region Получение рандомных людей; loginUser = reader.ReadString(); if (!loginUser.Equals("###ThisNull###")) { int level = Int32.Parse(reader.ReadString()); string imageU = reader.ReadString(); FeedPublic.listInterestingPeople.Add(new Person(loginUser, imageU, level, -1)); } else { FeedPublic.thisWindow.Dispatcher.BeginInvoke(new ThreadStart(() => { FeedPublic.PanelRandomPeople(FeedPublic.listInterestingPeople); })); } #endregion break; #endregion case 2003: #region Провка на подпику у профиля другого пользователя; Profile.thisWindow.Dispatcher.BeginInvoke(new ThreadStart(() => { int a = reader.ReadInt32(); Profile.IsSubscribe(Profile.thisWindow.subButton, (a == 1) ? false : true); })); #endregion break; } if (!soket.Connected) { break; } } } //catch(Exception ex) //{ // MessageBox.Show("GettingAnswerServer : " + ex.Message); // try // { // Application.Current.Dispatcher.Invoke(new ThreadStart(()=> // { // Application.Current.Shutdown(); // })); // } // catch { } //} finally { Thread.CurrentThread.Abort(); soket.Close(); } }