Диплом: Разработка сетевого программного обеспечения на примере текстового чата (на примере ООО "Криалл")

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
52
unsubscribe
Сообщение всем клиентам об отключении клиента от чата
broadcastClientList
Добавление нового клиента в список собеседников
Из приведенного списка видно, что протокол предназначен только для данного
проекта. Разработка универсального протокола передачи данных является сложной
задачей, требующей больших ресурсов.
Пример работы по протоколу (К – клиент, С – сервер):
К: connectToServer –подключение к серверу
К: /auth login1 pass1– запрос на авторизацию
C: /authOK - авторизация прошла успешно
С: broadcastClientList - сервер рассылает всем новый список клиентов
С: subscribe «nick1 присоединился к чату»
К: sendMsg «Добрый день
С: broadcastMsg «nick1 Добрый день!»
К: «/end» - клиент отключился
С: unsubscribe «nick1 вышел из чата»
С: broadcastClientList - сервер рассылает всем новый список собеседников
С: «serverClosed» - сервер остановлен
2.3.2 Характеристика базы данных
Для хранения информации используются базы данных, так как благодаря
им образуется организованная структура. В данном разделе рассмотрим базу
данных, выбранную для реализации проекта автоматизации компании ООО
«Криалл».
В ходе взаимодействия данных, имеющихся в базе, и методов, к которым
имеют доступ определенные сотрудники, образуется информация. Ее используют
сотрудники и совершают ввод и редактирование данных в рамках своей
компетенции. База данных непосредственно связана с системой управления самой
базой данных и представляет собой комплекс программных средств, нужных для
формирования структуры новой базы. Описанная система включает в себя
53
наполнение содержимым базу, редактирование данных и визуализацию
информации.
Говоря о визуализации информации базы имеется в виду отбор
отображаемых данных, учитывая заданные критерии. А также, визуализация
включает в себя упорядочение данных, их оформление, последующую выдачу
данных на устройствах вывода/передачи по каналам связи.
Простейший вид информационной модели можно показать в виде
взаимосвязей бизнес-компонентов и бизнес-процессов., которые называются ER-
диаграммы (Entity-relationship diagram (ERD) «Сущность-связь»). Такие
диаграммы прекрасно подходят как для структурного анализа, так и для
проектирования информационных систем. Применяя подобные методы, можно
обеспечить строгое и понятное описание проектируемой системы, путем ее
общего обзора и уточнения. Благодаря этому появляется возможность получить
разные степени детализации объектов, которые содержат различное количество
уровней[11].
При разработке проекта была использована база данных SQLite, потому что:
- вся база состоит из одного файла, её легко использовать на разных ПК
- наиболее распространенная и простая в использовании БД
- возможно использование уже существующего сервера
- язык SQL(который прост и очень удобен в использовании)
Описание структуры базы данных.
В проекте используется только одна база с одной таблицей, в которой
хранятся имя пользователя, пароль, ник для чата и уникальный
идентификационный номер пользователя.
Таблица 9. Представление таблицы данных users:
nick
login
password
id
54
В таблице users содержатся поля:
nick – хранится отображение имени клиента в чате;
loginхранится логин для авторизации клиента на сервере;
password – хранится пароль для авторизации клиента на сервере;
idуникальный идентификатор клиента, является первичным ключом
таблицы.
Создание базы данных users, таблицы users:
CREATE TABLE users (
nick TEXT,
login TEXT UNIQUE,
password TEXT,
id INTEGER PRIMARY KEY AUTOINCREMENT,
UNIQUE (nick)
);
Поскольку в данном проекте основной целью работы с БД является
авторизация пользователей, не целесообразно выделять отдельный класс для этого,
база данных создается средствами менеджера баз данных SQLiteStudio 3.1.1.
Преимущества SQLiteStudio:
Существование портативной версии, нет необходимости устанавливать
программу;
Распространяется бесплатно;
Легкий и понятный интерфейс с поддержкой русского языка;
Кроссплатформенность;
Поддерживает Unicode;
Поддерживает экспорт и импорт в различные форматы.
2.3.3 Структурная схема пакета (дерево вызова программных модулей)
55
В данном разделе рассмотрим что представляет собой дерево вызова
программных модулей. Дерево программы-сервера можно изобразить
следующим образом:
Рисунок 3. Дерево программных модулей
Описание модулей рассмотрим подробнее в таблице ниже.
Таблица 10. Модули программы-клиента и описание функций:
Название модуля
Функции модуля
MainServer
Является точкой входа в программу. Инициализирует
модуль Server.
Server
Содержит в себе методы для подключения новых клиентов,
отправки сообщений, поддержки актуального списка
контактов и контроль одновременной многократной
авторизации клиентов с использованием одних и тех же
данных на сервере. Отвечает за инициализацию модулей
ClientHandler и DBService.
ClientHandler
Содержит в себе методы для взаимодействия клиентов с
сервером. Отвечает за авторизацию клиентов. Прием
сообщений от клиента и отправку ему сообщений от
сервера в том числе и командных.
DBService
Содержит в себе методы по подключению к базе данных,
MainServer
Server
ClientHandler
DBService
56
отключению от нее и взаимодействию с ней сервера.
Рисунок 4. Дерево программных модулей программы-клиента:
Таблица 11. Модули программы клиента и описание функций:
Название модуля
Функции модуля
MainClient
Является точкой входа в программу клиента. Содержит
основные методы выполняемые при запуске программы.
Отвечает за расположение и размеры окна программы.
Инициализирует работу остальных модулей.
Controller
Содержит методы для взаимодействия пользователя с
интерфейсом программы, а так же для взаимодействия клиента
с сервером.
Sample
Содержит в себе инструкции для описания отображения
интерфейса программы. Отвечает за видимость областей
интерфейса при выполнении пользователем различных
действий.
Styles
Содержит в себе таблицу стилей в формате css для визуального
оформления интерфейса.
2.3.4 Описание программных модулей
Для описания программных модулей разрабатываемой программы
рассмотрим из чего она состоит:
MainClient
Controller
Sample
Styles
57
Программа-сервер;
Программа-клиент.
Программа-сервер выполняет следующие функции:
- Авторизация/регистрация пользователей
- Передача сообщений от одного пользователя в общую комнату
- Передача личных сообщений от пользователя пользователю
- Контролирует подключение/отключение клиентов
При реализации интерфейса программы были использован JavaFX. Так же
для упрощения разработки были использованы уже готовые реализованные классы.
Для лучшего понимания представленного программного модуля нужно
произвести описание разработанных классов программы сервера и программы
клиента.
Программа-сервер:
Класс «MainServer».
Класс MainServer является точкой входа в программу. Он создает объект
Server в конструкторе которого инициализируется объект ServerSocket,
инициализируется потокобезопасный список clients. После чего сервер встает в
режим прослушивания сокетов. При подключении нового клиента создается объект
ClientHandler, который помещается в список clients. Список обрабатывает Server.
Объекты ClientHandler осуществляют взаимодействие с подключенными клиентами
через сокет[12].
public class Server
{
private Vector<ClientHandler> clients; //список клиентов
private ServerSocket server; //сокет сервера
private Socket socket ; //сокет для подключения клиента
final private int PORT; //номер порта сервера
Server(){} //конструктор сервера
//метод рассылки сообщений всем клиентам
58
public void broadcastMsg(ClientHandler cl, String str) {}
//метод добавления клиента в список собеседников
public void subscribe(ClientHandler client) {}
//метод удаления клиента из списка собеседников
public void unsubscribe(ClientHandler client) {}
//метод отправки приватного сообщения
public void privateMsg(String str, ClientHandler sender) {}
//метод для предотвращения многократной авторизации под одним логином и
паролем
public boolean checkAuthorized(String newNick) {}
//метод рассылки актуального списка собеседников клиентам
public void broadcastClientList(){}
}
Класс «Server» основной в программе, в нем хранится список подключенных
клиентов (ClientHandler). Класс отвечает за подключение и отключение клиентов и
обмен сообщениями между ними.
Класс «ClientHandler»
public class ClientHandler {
private Server server; //объект сервера
private Socket socket; //объект сокета
private DataOutputStream out; //исходящий поток
private DataInputStream in; //входящий поток
private String nick; //имя клиента
private boolean isSubscribe; //флаг подключения клиента
private boolean isTimeOut; //флаг таймаута
ClientHandler(Server server, Socket socket) {} //конструктор класса
//метод возвращает имя авторизованного клиента
public String getNick(){}
//метод отправляет сообщение подключенному клиенту
59
public void sendMsg(String str) {}
}
В момент подключения нового клиента, на сервере создается новый объект
ClientHandler. В объект передается объект сервера и сокет, через который он
общается с подключившимся клиентом. В конструкторе класса создаются
исходящий и входящий потоки для общения с клиентом, потоки создаются в
разных нитях и работают параллельно. ClientHandler принимает и обрабатывает
служебные команды от клиента. В процессе работы класс отправляет служебные
команды клиенту. Так же класс ClientHandler взаимодействует с классом DBService,
отвечающим за взаимодействие с базой данных. В случае отсутствия авторизации
клиента в течении 120 секунд сервер закрывает соединение с клиентом.
Класс «DBService»
public class DBService {
private static Connection connection; //соединение с БД
private static Statement statmt; //объект для выполнения SQL запросов
//метод для подключения к БД
public static void connect() throws ClassNotFoundException {}
//метод для проверки присутствия пары логина и пароля в БД
public static String getNickBy(String login, String pass) {}
//метод для отключения от БД
public static void disconnect(){}
}
Класс DBService отвечает за взаимодействие сервера с базой данных. Он
осуществляет подключение к БД и отключение от нее. В классе использован метод
для проверки авторизации клиентов он отсылает в БД SQL запросы и обрабатывает
ответы на них.
Программа-клиент
Класс «MainClient»
public class MainClient extends Application {
//метод создания окна для GUI клиента
60
public void start(Stage primaryStage) throws Exception {
FXMLLoader loader = new
FXMLLoader(getClass().getResource("sample.fxml")); //подключение .fxml
файла с параметрами отображения GUI клиента
Parent root = loader.load(); //загрузка параметров отрисовки GUI
Controller controller = loader.getController(); //подключение класса
Controller
primaryStage.setTitle("Java Chat"); //изменение заголовка
Scene scene = new Scene(root, 500, 400); //параметры размеров окна
primaryStage.setScene(scene); //загрузка сцены
primaryStage.show(); //отображение сцены
//событие при закрытии окна клиента
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
public void handle(WindowEvent we) {
controller.closedClient();
}
});
//точка входа
public static void main(String[] args){}
}
Класс «MainClient» отвечает за запуск GUI клиента и параметры
отображения окна.
Класс «Controller»
public class Controller
{
private Socket socket; //сокет для подключения
private DataInputStream in; // входящий поток
private DataOutputStream out; // исходящий поток
private final int PORT = 8189; //порт сервера
@FXML
61
TextArea textArea; //окно сообщений GUI
@FXML
TextField textField; //поле отправки сообщений GUI
@FXML
Button btn1; //кнопка отправки сообщений GUI
@FXML
TextField loginField; //поле логина для авторизации GUI
@FXML
PasswordField passwordField; //поле пароля для авторизации GUI
@FXML
HBox upperPanel; //панель отображения до авторизации GUI
@FXML
HBox bottomPanel; //панель отображения после успешной авторизации
GUI
@FXML
ListView<String> list; //список собеседников GUI
@FXML
VBox inChat; //панель расположения списка собеседников GUI
//метод подключения клиента к серверу
public void connect(){}
//метод отправки сообщения на сервер
public void sendMsg(){}
//метод отправки данных для авторизации на сервер
public void tryToAuth(ActionEvent actionEvent){}
//метод проверки авторизации клиента
public void setAuthorized(boolean isAuthorized) {}
//метод отправки сообщения о закрытии клиента на сервер
public void closedClient(){}

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

Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)
Value-based education: ценности в системе образования и способы их реализации на уроке английского языка. Опыт Европейских стран
Work-life balance подход в управлении рабочим временем молодых сотрудников (на примере ООО «МГТ-сервис»)
Актуализация контента, отражающего концепцию «диалога культур», при освоении английского языка взрослыми обучающимися
Актуализация приемов инсценирования и драматизации в рамках интерактивной модели обучения английскому языку в старших классах
Актуальные подходы в построении внутреннего pr строительной компании (на примере ООО "Ренессанспроект")
Анализ деловой активности и экономической эффективности деятельности организации (на примере АО «СГ-Транс»)
Анализ деловой активности организации как инструмент повышения эффективности ее деятельности (на примере Косинского районного потребительского общества)