Диплом: Разработка сетевого чата для медицинской организации

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
45
Дата регистрации в Unix
формате
reg_date число 10
Описание базы данных «История сообщений» представлено в таблице 6.
Таблица 6
История сообщений
наименование поля
и
дентификатор
поля
т
ип
поля
д
лина
поля
прочее
Код сообщения id число 10
ключевое
поле
Время сообщения в Unix
формате
msg_date число 10
Код пользователя id_user число 10
Текст сообщения msg текст 8192
В настоящее время существует множество систем управления базами
данных (СУБД) для реализации проекта. Простота и понятность реляционной
СУБД явились основной причиной её широкого использования. Ознакомимся с
наиболее популярными представителями реляционной СУБД:
1) SQLite - библиотека, встраиваемая в приложение. SQLite,
предоставляет отличный набор инструментов для более простой обработки
любых видов данных. Когда приложение использует SQLite, их связь
производится с помощью функциональных и прямых вызовов файлов,
содержащих данные, что повышает скорость и производительность операций.
Сфера применения SQLite: встроенные приложения (локальные
однопользовательские приложения, мобильные приложения или игры), система
доступа к дисковой памяти, тестирование;
2) MySQL - серверная СУБД, которая предлагает широкий
функционал, работает под многими операционными системами и на разных
аппаратных платформах. Приложения общаются с базой данных через процесс-
демон. Область применения: распределённые операции, веб-сайты и
приложения;
3) Microsoft SQL Server - СУБД, движок которой работает на облачных
серверах, а также локальных серверах. Существует возможность комбинировать
типы применяемых серверов одновременно. Последняя версия Microsoft SQL
46
Server поддерживает динамическую маскировку данных, которая гарантирует,
что исключительно авторизованные пользователи будут видеть
конфиденциальные данные. Область применения Microsoft SQL Server:
распределённые операции, веб-сайты и приложения.
Достоинства и недостатки реляционных СУБД рассмотрены в таблице 7.
Таблица 7
Достоинства и недостатки реляционных СУБД
наименование
СУБД
достоинства
недостатки
1.
MySQL
легко устанавливается
содержит множество
инструментов
поддерживает функционал
SQL
безопасность
работа с большими
объёмами данных
высокая скорость
ограничен функционал
неполная совместимость с
SQL
одновременные операции
чтения-записи вызывают
проблемы
2.
SQLite
база данных хранится в
одном файле
использует SQL
отсутствие
пользовательского
управления
невозможность
дополнительной настройки
3.
Microsoft SQL
Server
простота использования
быстрота и стабильность
доступ к визуализации на
мобильных устройствах
взаимодействие с
продуктами Microsoft
высокая цена
занимает все ресурсы
В результате сравнительного анализа рассмотренных СУБД, выбор
сделан в пользу MySQL, так как СУБД является серверной, простой, безопасной
и обладающей высокой скоростью.
Обмениваться информацией решено по коммуникационному протоколу -
TCP/IP, который гарантирует целостность доставки пакета до адресата. В
ТСР/IР-сетях на межсетевом уровне используется единый способ адресации - IР-
адресация. В заголовке TCP/IP пакета указывается: IP-адрес отправителя, IP-
адрес получателя, номер порта (номер прикладной программы, для которой
предназначен пакет). За доставку пакета в ТСР/IР - сети отвечает
47
маршрутизатор [18].
2.2.6 Функциональное обеспечение
В данном проекте в качестве актеров выступают клиентское приложение
и серверное приложение. Пользователь непосредственно взаимодействует с
клиентским приложением и должен иметь возможность выполнить следующие
действия: подключиться к серверу, отключиться от сервера, отправить/принять
текстовое сообщение, получить уведомление о новом текстовом сообщении,
отправить/принять файл. Сервер добавляет / удаляет клиента из списка и
осуществляет передачу данных.
В качестве графического представления для выделения основных
функций программы применена диаграмма вариантов использования.
Диаграмма вариантов использования дает представление о том, что должна
делать система. Диаграмма составлена в онлайн-сервисе Draw.io и представлена
в приложении 4.
Диаграмма активности дает представление о том, как должна работать
система (приложение 5). Диаграмма показывает последовательность действий -
элементарных шагов, которые не предполагают дальнейшей декомпозиции.
На диаграмме последовательности (приложение 6) возможно увидеть
следующие аспекты:
- сообщения, побуждающие объект к действию;
- действия, которые вызываются сообщениями (методы) - передача
сообщения следующему объекту или возвращение определенных данных
объекта;
- последовательность обмена сообщениями между объектами.
На диаграмме развертывания показаны узлы Client.exe, Server.exe,
которые входят в сетевой чат. Узлы состоят из модулей MahApps.Metro.dll,
ChatLib.dll, NewtonSoft.dll, MySql.Data.dll и соединяются при помощи протокола
ТСР. Диаграмма развертывания представлена на рисунке 6.
48
Рисунок 6 Диаграмма развертывания
2.2.7 Структурное обеспечение
Сервер состоит из четырех классов:
1) Статический класс SQL подключается/отключается от базы данных
МySQL. Класс содержит методы:
- Connect - подключается к базе данных MySQL;
- Disconnect - отключается от базы данных MySQL;
2) Класс SQLConfig содержит данные авторизации и адрес для
подключения к базе данных. Поля класса:
- Server - хранит IP адрес для подключения к базе данных;
- User - хранит логин пользователя для подключения к базе данных;
- Password - хранит пароль пользователя для подключения к базе данных;
- Database - название базы данных MySQL;
- Prefix - префикс для таблиц базы данных;
3) Класс User хранит данные, извлеченные из базы данных. Поля
класса:
- Id - уникальный номер пользователя;
- Login - логин пользователя;
- Password - пароль пользователя;
- Email - электронная почта пользователя;
- RegDate - дата регистрации пользователя в Unix формате;
Методы класса:
- Auth - авторизация пользователя;
- Add - добавление зарегистрировавшегося пользователя в базу данных;
49
- Search - поиск по логину или по уникальному номеру в базе данных;
4) Класс History хранит данные, извлеченные из базы данных. Поля
класса:
- MsgDate - дата сообщения в Unix формате;
- IdUser - уникальный номер пользователя;
- Msg - текст сообщения;
- Get - получить историю сообщений из базы данных;
- Add - добавить новое сообщение в базу данных;
- DeleteOld - удалить старые сообщения из базы данных.
Интерфейс приложения сервер:
1) MainWindow.xaml описывает главное окно;
2) StartServer.xaml описывает окно запуска сервера;
3) About.xaml описывает информацию о программе.
На основании вышеописанного построена диаграмма классов сервера,
представленная в приложении 7.
Приложение клиент состоит из шести классов:
1) Класс MainWindow - описывает поведение главного окна;
2) Класс SignIn - описывает поведение формы подключения;
3) Класс SignUp - описывает поведение формы регистрации;
4) Класс ForgotPassword - описывает поведение формы восстановления
пароля;
5) Класс Support - описывает поведение формы обращения в
техническую поддержку;
6) Класс About - описывает поведение окна «О программе»;
Интерфейс клиента:
1) MainWindow.xaml - описывает элементы главного окна;
2) SignIn.xaml - описывает форму подключения;
3) SignUp.xaml - описывает форму регистрации;
4) ForgotPassword.xaml - описывает форму восстановления пароля;
5) Support.xaml - описывает форму обращения в техническую
50
поддержку;
6) About.xaml - описывает окно «О программе»;
7) UserControlMessage.xaml - описывает элемент пользовательского
элемента.
На основании вышеописанного построена диаграмма классов клиента,
представленная в приложении 8.
ChatLib.dll - общая библиотека для клиента и сервера включает набор
классов:
1) Класс ChatServer - управляет сервером, содержит методы:
- Start - запустить сервер;
- Stop - остановить сервер;
- Restart - перезапустить сервер;
- BroadcastMessage - отправить всем сообщение;
- UnicastMessage - отправить сообщение пользователю;
2) Класс Message - хранит данные о переданном сообщении. Поля класса:
- MessageType - тип сообщения;
- Login - логин отправителя сообщения;
- Password - пароль отправителя сообщения;
- Email - электронная почта отправителя сообщения;
- Msg - текст сообщения от отправителя;
Класс имеет метод:
- RemoveSpecialCharacters - удаляет специальные символы из сообщения;
3) Класс User - класс для подключения пользователя к серверу, включает
методы:
- Listen - ожидает поступление сообщения;
- ReadMessage - принять сообщение;
- WriteMessage - отправить сообщение;
4) Класс UserAuthData - хранит данные авторизации пользователя. Поля
класса:
- Login - логин пользователя;
51
- Password - пароль пользователя;
- Email - электронная почта пользователя;
5) Статический класс Info - хранит информацию о приложенииях. Поля
класса:
- ClientVersion - версия клиента;
- ServerVersion - версия сервера;
6) Класс UnixTimeStamp - позволяет преобразовать класс DateTime в Unix
формат и обратно. Методы класса:
- Get - получить время в Unix формате;
- ToDateTime - преобразовать время из Unix формата в класс DateTime;
- ToUnix - преобразовать время из DateTime в Unix формат;
7) Класс Email - позволяет отправить сообщение через электронную
почту. Методы класса:
- SendMailMessage - отправить сообщение по электронной почте;
- IsValidEmailAddress - проверить корректность адреса электронной
почты;
8) Класс Hash - класс для вычисления хеша, имеет метод:
- sha512 - вычисляет SHA512 хеш из строки;
9) Класс DataConverter - преобразует данные в байты и обратно. Методы
класса:
- ToByteArray<T> - преобразует данные типа T в массив байтов;
- FromByteArray<T> - преобразует массив байтов в тип T;
10) Класс StringEx - класс, расширяющий возможности класса string.
Класс содержит метод:
- RemoveSpecialCharacters - удаляет специальные символы из строки;
Перечисление MessageType - типы сообщений (System - системное,
Register - регистрация, History - история, Hello - системное приветствие, Text -
текст, File - файл).
На основании вышеперечисленного построена диаграмма классов общей
библиотеки ChatLib.dll, представленная в приложении 9.
52
2.3 Программирование сетевого чата
2.3.1 Детальная реализация функциональной части сервера
Детальная реализация функциональных частей сетевого чата выполнена
на языке программирования высокого уровня C#.
Листинг статического метода Connect статического класса SQL для
подключения к MySQL:
public static bool Connect() {
_mySqlConnection?.Close();
var connectionString = $"server={SQLConfig.Server};" +
$"uid={SQLConfig.User};pwd={SQLConfig.Password};" +
$"database={SQLConfig.Database}";
try {
_mySqlConnection = new MySqlConnection(connectionString);
_mySqlConnection.Open();
MySqlCommand = _mySqlConnection.CreateCommand();
}
catch (MySqlException ex) {
Error = ex.Message;
return false;
}
return true;
}
Листинг статического метода Auth статического класса SQL для проверки
логина и пароля пользователя в базе данных:
public static bool Auth(string login, string password) {
var user = Search(login);
if (user == null) return false;
var hashPass = Hash.sha512(password);
return user.Login == login && user.Password == hashPass;
}
53
Листинг метода BroadcastMessage для рассылки сообщения всем
авторизированным пользователям:
public void BroadcastMessage(Message message) {
if(message.Msg == string.Empty) return;
foreach (var user in Users)
user.WriteMessage(message);
}
Листинг метода UnicastMessage для отправки сообщения конкретному
авторизированному пользователю:
public void UnicastMessage(User user, Message message) {
if (message.Msg == string.Empty) return;
user.WriteMessage(message);
}
Листинг приложения сервер отражен в приложении 10.
2.3.2 Детальная реализация функциональной части клиента
Листинг метода ReadMessage класса User для чтения сообщения от
сервера:
public Message ReadMessage() {
var data = Read();
var msg = DataConverter.FromByteArray<Message>(data);
return msg;
}
Листинг метода WriteMessage класса User для отправки сообщения:
public void WriteMessage(Message message) {
var data = DataConverter.ToByteArray(message);
Write(data);
}
Листинг метода Read класса User для принятия данных от сервера:
private byte[] Read() {
var stream = _tcpClient.GetStream();
54
var data = new byte[8192];
using (var ms = new MemoryStream()) {
int numBytesRead = stream.Read(data, 0, data.Length);
ms.Write(data, 0, numBytesRead);
return ms.ToArray();
}
}
Листинг метода Write класса User для отправки данных на сервер:
private void Write(byte[] data) => _tcpClient.GetStream().Write(data, 0,
data.Length);
Листинг приложения клиент отражен в приложении 11.
Листинг общей библиотеки для приложения сервер и приложения клиент
представлен в приложении 12.
2.3.3 Создание базы данных
Листинг создания базы данных представлен на рисунке 7 и в приложении
13.
Рисунок 7 Листинг создания базы данных
Для извлечения информации из таблицы требуются следующие SQL
команды:
1. Получить историю сообщений - SELECT * FROM `n5s4r_history`;
2. Добавить новое сообщение в базу данных - INSERT INTO
`n5s4r_history`(`id`, `msg_date`, `id_user`, `msg`) VALUES ([value-1],[value-
2],[value-3],[value-4]);
3. Удалить старые сообщения - DELETE FROM `n5s4r_history` WHERE
`msg_date` < [value-1];

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)
Value-based education: ценности в системе образования и способы их реализации на уроке английского языка. Опыт Европейских стран