/// <summary> /// Поток для прослушивания клиентов /// </summary> /// <param name="obj">Сокет клиента</param> private static void CoorCallback(object obj) { Socket client = (Socket)obj; MemoryStream ms = new MemoryStream(new byte[520], 0, 520, true, true); BinaryReader reader = new BinaryReader(ms); try { while (true) { if (client.Connected) { client.Receive(ms.GetBuffer()); ms.Position = 0; int idOperationMySql = reader.ReadInt32(); string login, password, email, nameProject; string[] infoUser = new string[5]; switch (idOperationMySql) { #region абота с базой и сервером (1 - 999) // Disconnect -1. case -1: login = reader.ReadString(); OperationServerAtClient.Disconnect(login); break; // Connect 1. case 1: login = reader.ReadString(); password = reader.ReadString(); OperationServerAtClient.CheckLoginAndPasswordUser(client, login, password); break; // CheckData 2. Проверка на валидность данных авторизации юзера в базе; case 2: login = reader.ReadString(); email = reader.ReadString(); OperationServerAtClient.CheckUnique(client, login, email); break; // AddUser 3. Добавляет в базу нового пользователя; case 3: login = reader.ReadString(); password = reader.ReadString(); email = reader.ReadString(); OperationServerAtClient.CreateNewUser(login, password, email); break; // InfoUser 4. Узнаем информацию о юзере; case 4: login = reader.ReadString(); OperationServerAtClient.CheckFullInfoOfPerson(client, login, reader.ReadBoolean()); break; // CheckNewLike 5. Проверяем изменение в количестве лайков у пользователя; case 5: login = reader.ReadString(); OperationServerAtClient.CheckNewLike(client, login); break; // AddNewInfoOfPerson 6. Добавлем новую информацию о пользователе; case 6: login = reader.ReadString(); for (int i = 0; i < infoUser.Length; i++) { infoUser[i] = reader.ReadString(); } OperationServerAtClient.AddNewInfoForPerson(login, infoUser); break; // UpdateInfoAboutPerson 7. Обновляем информацию о пользователе; case 7: login = reader.ReadString(); for (int i = 0; i < infoUser.Length; i++) { infoUser[i] = reader.ReadString(); } OperationServerAtClient.UpdateInfoAboutPerson(login, infoUser); break; // GetViewApplication 8. Получение списка категорий приложения; case 8: SendMsgClient(client, 256, 7, OperationServerAtClient.GetListViewApplication()); break; //GetFullInfoForProject 9. Получение всей информации о выбранном проекте; case 9: login = reader.ReadString(); nameProject = reader.ReadString(); OperationServerAtClient.GetFullInfoForProject(client, login, nameProject); break; //UpdateInfoForProject 10. Изменяем информацию о проекте; case 10: OperationServerAtClient.UpdateInfoForProject(client, reader.ReadInt32(), reader.ReadString(), reader.ReadInt32(), reader.ReadString(), reader.ReadString()); break; #region абота с почтой // CheckEmail 101. Проверка почты пользователя; case 101: email = reader.ReadString(); OperationServerAtClient.CheckUnique(client, string.Empty, email, 4); break; // SendMailCode 102. Отправка кода восстановления на почту пользователя; case 102: email = reader.ReadString(); int code = EmailBot.TextCode(); string msg = "Код восстановления : " + code; EmailBot.SendMail(EmailBot.smtp, EmailBot.mail, EmailBot.password, email, EmailBot.themeMsg, msg); SendMsgClient(client, 64, 6, code); break; // UpdatePassword 103. Отправка пароля на почту, и изменение его в базе; case 103: email = reader.ReadString(); password = EmailBot.RandomPassword(8); msg = "Новый пароль : " + password; EmailBot.SendMail(EmailBot.smtp, EmailBot.mail, EmailBot.password, email, EmailBot.themeMsg, msg); OperationServerAtClient.UpdatePasswordMail(email, password); break; #endregion #endregion #region абота с файлами которые храняться на сервере (1000 - 1999) // Получение свойств файла от клиента; case 1001: foreach (var clientS in clients) { if (clientS.socket == client) { uint sizeFile = reader.ReadUInt32(); fileSettList.Add(new FileSett(reader.ReadString(), reader.ReadString(), sizeFile, clientS)); Console.WriteLine("Размер файла : " + sizeFile); SendMsgClient(client, 16, 1001); break; } } break; // Получение пакетов; case 1002: foreach (var fileSend in fileSettList) { if (fileSend.user.socket == client) { int countRecByte = reader.ReadInt32(); byte[] byteFile = reader.ReadBytes(countRecByte); if (fileSend.progressSend == null) { fileSend.progress += countRecByte; OperationServerAtClient.ReceivedFile(fileSend, byteFile, countRecByte); } else { fileSend.progress += countRecByte; Console.WriteLine(fileSend.progress + " " + fileSend.progressSend.Length); OperationServerAtClient.ReceivedFile(fileSend, byteFile, countRecByte); } if (fileSend.progressSend.Length <= fileSend.progress || countRecByte == 0) { Console.WriteLine(fileSend.progress + " " + (fileSend.progressSend.Length)); CreateFile(client); } break; } } break; // Создание файла по полученным данным от клиента; case 1003: CreateFile(client); break; // Удаление файла с архива; case 1004: foreach (var clientU in clients) { if (clientU.socket == client) { string directoryUser = pathProjectFile + "\\" + clientU.name; string nameFile = reader.ReadString(); WriteConsoleMsg(clientU.name + " удалил файл : " + nameFile); string fullPathFile = directoryUser + "\\" + nameFile; OperationServerAtClient.DeleteProjectDatabase(clientU.name, nameFile); File.Delete(fullPathFile); break; } } break; // Получение списка проектов у данного пользователя; case 1005: OperationServerAtClient.GetListProject(client, reader.ReadString(), reader.ReadBoolean()); break; // Получение массив байт файла который выбрал клиент для скачивания; case 1006: foreach (var user in clients) { if (user.socket == client) { string nameUser = reader.ReadString(); string nameFile = reader.ReadString(); string pathFile = $"{pathProjectFile}\\{nameUser}\\{nameFile}"; byte[] fileByte = File.ReadAllBytes(pathFile); OperationServerAtClient.listFileSend.Add(new FileSett(nameFile, fileByte, user)); Console.WriteLine($"{user.name} начиниет получать файл размера : {fileByte.Length}"); SendMsgClient(user.socket, 256, 1003, fileByte.Length, nameFile); break; } } break; // Отправка файла по пакетам; case 1007: OperationServerAtClient.ContinueSendFile(client); break; #endregion #region абота с людьми\проектами и т.д (2000 - 3000) // Поиск людей по введеной строке; case 2000: workPeople.SearchPeople(client, reader.ReadString()); break; // Получение списока проектов с лучшим рейтингом; case 2001: workPeople.SendTopProject(client); break; // Получение рандомных людей; case 2002: workPeople.RandomPeople(client, reader.ReadString()); break; // Подписка\Отписка от данного пользователя; case 2003: string profile = reader.ReadString(); string subUser = reader.ReadString(); bool isSub = reader.ReadBoolean(); workPeople.SubscribeUser(profile, subUser, isSub); break; // Проверка на подписку пользователя; case 2004: profile = reader.ReadString(); subUser = reader.ReadString(); SendMsgClient(client, 128, 2003, workPeople.CheckSubscribe(profile, subUser)); break; #endregion } } } } catch (Exception ex) { if (client != null) { client.Close(); foreach (var clientU in clients) { if (clientU.socket.Equals(client)) { clients.Remove(clientU); break; } } } WriteConsoleMsg(ex.Message); } finally { Thread.CurrentThread.Abort(); } }