Пояснительная записка (1231620), страница 7
Текст из файла (страница 7)
if((id=db.autorisation(log, pass))!=-1){
out.println("$accept$");
out.println("ID="+id);
accept.setID(id);
sendNewMassages();
} else
out.println("$notaccept$");
};
public int autorisation(String log, String pass) throws
ClassNotFoundException, SQLException {
resSet=statmt.executeQuery("SELECT * FROM 'users' WHERE
name='"+log+"' AND
password='"+pass+"';");
if(resSet.next())
return Integer.parseInt(resSet.getString("id"));
else return -1;
};
Основная задача, которую выполняет сервер – переадресация поступающих сообщений между клиентами и хранение их в базе данных. Помимо этого сервер также по запросу клиентов отправляет весь список доступных пользователей, и ранее отправленные диалоги.
Для решения задачи переадресации выбран достаточно простой механизм, а именно:
– сервер последовательно считывает всю информацию, которая к нему поступает, и при получении ключевого слова «$toID$» считывает IP адрес пользователя, которому предназначено сообщение;
– считываются все строки сообщения до тех пор, пока не встретится завершающее ключевое слово «$end$»;
– происходит поиск в массиве подключенных пользователей необходимого клиента;
– при нахождении такого, сервер отправляет данному пользователю ключевое слово «$fromID$» и ID номер клиента, от которого переадресовано сообщение. Также отправляется весь текст сообщения и ключевое слово «$end$»;
– если отсутствует в списке такой пользователь, то сообщение заносится в базу данных в таблицу неотправленных сообщений.
Код данного процесса представлен ниже:
try{
String input;
while ((input = in.readLine())!=null) {
if(input.contains("$toServer$")){
switch (Integer.parseInt(input.split(" ")[1])){
case 200:{
sendClientsInfo();
break;
}
}
} else if (input.contains("$toID$")){
Iterator<newAccept> itr = clients.iterator();
newAccept to = null;
int where=Integer.parseInt(input.split(" ")[1]);
String what = "";
while (!(input = in.readLine()).equals("$end$")) {
what+=input+"\r\n";
}
what=what.substring(0, what.length()-2);
boolean isSend=false;
Date currentDate = new Date();
while (itr.hasNext()) {
to=itr.next();
if(where==to.getID()){
isSend=true;
PrintWriter out1=new PrintWriter
(to.client.getOutputStream(),true);
out1.println("$fromID$");
out1.println(accept.idClient);
out1.println(what);
out1.println("$end$");
System.out.println("to "+accept.idClient+
" ("+to.getIP()+"):"+what);
}
if(isSend)
db.saveMassage("UsersMassages",what,
accept.idClient, where, currentDate.getTime());
else
db.saveMassage("NotSend",what, accept.idClient,
where, currentDate.getTime());
}
} else {System.out.println(":"+input); }
}
System.out.print("Closer\n");
in.close();
} catch(Exception e){
System.out.println("init error get1: "+e);
}
}
При авторизации нового пользователя на сервере вызывается функция, которая считывает из базы данных все сообщения, которые предназначаются этому пользователю и оправляются ему. Отправленные сообщения удаляются из таблицы неотправленных и записываются в таблицу доставленных сообщений. Код программы представлен ниже:
public void sendNewMassages() throws ClassNotFoundException,
SQLException{
Map<String,String> IDs=db.getMassage("NotSend",
accept.idClient);
Set set = IDs.entrySet();
Iterator i = set.iterator();
while(i.hasNext()){
Map.Entry me = (Map.Entry)i.next();
out.println("$fromID$");
out.println(me.getKey().toString().split(":")[1]);
out.println(me.getValue());
out.println("$end$");
db.deleteMassage("NotSend",
me.getKey().toString().split(":")[2]);
db.saveMassage("UsersMassages",
me.getValue().toString(),
Integer.parseInt(
me.getKey().toString().split(":")[1]),
accept.idClient,
Long.parseLong(
me.getKey().toString().split(":")[0]));
}
};
public Map<String,String> getMassage(String table, int id)
throws ClassNotFoundException, SQLException {
resSet=statmt.executeQuery("SELECT * FROM "+table+
" WHERE ToUser="+id+";");
Map<String,String> IDs=new HashMap<String,String>();
while(resSet.next()){
String head=resSet.getString("Time")+":"+
resSet.getString("FromUser")+":"+
resSet.getString("ID");
IDs.put(head, resSet.getString("Massage"));
}
return IDs;
}
Таким образом, диалоги между пользователями всегда хранятся в базе данных, доступ которой есть только у серверного приложения. Также исключена утеря сообщений ввиду отсутствия пользователя в сети.
Важной особенностью серверного модуля является распределение клиентов компании между операторами. Это функция выполняется следующим образом:
– определяется количество доступных операторов;
– вычисляется количество клиентов у каждого оператора;
– выбирается самый свободный оператор по количеству клиентов;
– если таких операторов несколько, то клиент добавляется первому свободному оператору.
Код данной функции представлен ниже:
public newAccept getFridomOperator(){
HashSet<newAccept> operators=getOnlineOperators();
newAccept[] freeOperators;
operators.toArray(freeOperators);
newAccept temp;
for(int i=0; i < freeOperators.length; i++) {
for(int j = freeOperators.length-1; j > i; j--) {
if (freeOperators[j-1].clientCount >
freeOperators[j].clientCount) {
temp=freeOperators[j-1];
freeOperators[j-1]=freeOperators[j];
freeOperators[j]=temp;
}
}
}
return freeOperators[0];
}
Несмотря на то, что сортировки был использован очень медленный метод пузырька [41], процесс будет осуществляться очень быстро, так как количество операторов всегда не очень большое.
В результате разработки серверный модуль получил следующие функции:
– пересылки сообщений между любыми клиентами приложения;
– распределение клиентов компании между сотрудниками;
– работа с базой данных SQLite;
– аутентификация сотрудника компании.
4.4 Технико-экономическое обоснование разработанного ПО
Программу, как любое техническое решение необходимо рассматривать с экономической точки зрения экономической целесообразности и пользы.
Программное изделие должно быть разработано так, чтобы оно выполняло свои функции без лишних затрат ресурсов (оперативной памяти ЭВМ, машинного времени, пропускной способности каналов передачи данных, время разработки и денежных).
Произведём расчет затрат на разработку системы онлайн-консультанта:
Суммарные затраты на разработку программы рассчитываются по следующей формуле:
(1)
где SЗП – затраты по заработной плате программиста, руб.; SНАК – накладные расходы, руб.
Затраты по заработной плате программиста рассчитываются по формуле:
(2)
где ОЗП – основная заработная плата программиста за месяц (20000 руб.); tрi – время, необходимое для разработки программы программистом (2), мес.; ωд – коэффициент, учитывающий дополнительную заработную плату разработчика программы, в долях к сумме основной заработной платы; ωс – коэффициент, учитывающий начисления органам социального страхования на заработную плату разработчика программы, в долях к сумме основной заработной плате разработчика.
Программа разрабатывалась 33 дня, если учесть, что в одном месяце 22 рабочих дня, то:
(мес.).
Таким образом, затраты по заработной плате программиста составят:
(руб.).
Накладные затраты рассчитываются с учетом ωн – коэффициента, определяющего уровень накладных расходов организации по формуле (3):
. (3)
Накладные затраты на разработку составят
(руб.).
Таким образом, суммарные затраты на разработку системы составляют:
(руб.).
Максимальный (минимальный) срок окупаемости системы онлайн-консультирования определяется по формуле (4):
(4)
где – минимальная (максимальная) цена подобного программного продукта в год.
Таким образом, максимальное время окупаемости система онлайн-консультанта составляет
(лет),
а минимальный срок окупаемости
(лет).
Исходя из вышесказанного, срок окупаемости системы онлайн-консультанта составляет 3 года.
ЗАКЛЮЧЕНИЕ
В данной выпускной квалификационной работе рассмотрены недостатки существующих приложений, осуществляющих дистанционное консультирование клиентов web-сайтов. Анализ недостатков доказал, что данные системы необходимо модернизировать.
В ходе выполнения выпускной квалификационной работы разработано приложение «Онлайн-консультант» созданное при помощи новейших технологий. Данное приложение состоит из трех частей: серверного приложения, универсального модуля для сайтов и клиентского приложения.
Цель выпускной квалификационной работы успешно выполнена. Решены следующие задачи:
– рассмотрены основные доступные технологии обмена информацией;
– реализовано приложение серверного обработчика сообщений и внутренних команд;
– реализовано клиентское приложение с возможностью обмена сообщениями с модулем сайта и с другими копиями клиентских приложений;
– разработан универсальный встраиваемый модуль для сайта, используя новую современную технологию WebSocket.
Готовое приложение будет рассмотрено к внедрению в существующий сайт компании.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1 Инькова Н.А. Современные интернет-технологии в коммерческой деятельности. Учебное пособие. – М.: Изд-во Омега-Л, 2007. – 192 с.
2 Андросов Н. Интернет-маркетинг на 100%. Отдельное издание/ Н. Андросов, И. Ворошилова, В. Долгов, С. Замарацкая, И. Манн – СПб.: Питер 2011. – 240 с.
3 RedHelper. Система онлайн-консультирования. [Электронный ресурс] – Режим доступа: http://redhelper.ru/ (Обращение к документу 1 апреля 2016).
4 LiveTex. Решение для омникального обслуживания. [Электронный ресурс] – Режим доступа: https://livetex.ru/ (Обращение к документу 1 апреля 2016).
5 CleverSite. Онлайн-консультант и обратный звонок. [Электронный ресурс] – Режим доступа: http://cleversite.ru/ (Обращение к документу 5 апреля 2016).
6 WebConsult – онлайн консультант для сайта. [Электронный ресурс] – Режим доступа: https://consultsystems.ru/ (Обращение к документу 10 апреля 2016).
7 Онлайн консультант для сайта JivoSite – консультируйте клиентов на сайте онлайн. [Электронный ресурс] – Режим доступа: http://www.jivosite.ru/ (Обращение к документу 10 апреля 2016).
8 Шаньгин В.Ф. Информационная безопасность и защита информации. – М.: Изд-во ДМК Пресс, 2014. – 416 с.
9 Виджеты в работе сайта. [Электронный ресурс] – Режим доступа: http://newmediaedu.ru/technology/21 (Обращение к документу 15 мая 2016).
10 Что такое виджеты. [Электронный ресурс] – Режим доступа: http://widgetok.ru/2009/01/what-is-widgets/ (Обращение к документу 15 мая 2016).
11 Сухов К.А. HTML 5. Путеводитель по технологии. – М.: Изд-во ДМК Пресс, 2013. – 352 с.
12 Лазарис Л. CSS. Быстрый старт. – СПб.: БВХ-Петербург, 2010. – 608 с.
13 Будилов В.А. Интернет-программирование на Java. – СПб.: БВХ-Петербург, 2003 – 704 с.
14 Частые опросы (polling). Учебник по AJAX и COMET. [Электронный ресурс] – Режим доступа: http://javascript.ru/ajax/comet/polling (Обращение к документу 18 мая 2016).
15 Длинные опросы (long poll). Учебник по AJAX и COMET. [Электронный ресурс] – Режим доступа: http://javascript.ru/ajax/comet/long-poll (Обращение к документу 18 мая 2016).
16 Бесконечный IFrame. Учебник по AJAX и COMET. [Электронный ресурс] – Режим доступа: http://javascript.ru/ajax/comet/iframe (Обращение к документу 18 мая 2016).
17 Darie C. AJAX and PHP: Building Responsive Web Applications/ C. Darie, B. Bogdan – Birmingham, UK: Packt Publishing 2006. – 286 p.
18 Adobe Flash Professional CS6 Classroom in a Book/ Adobe Creative Team – USA.: Adobe Press 2012. – 418 p.
19 Fielding R. Hypertext Transfer Protocol - HTTP/1.1 / R. Fielding, J. Gettys, J. Mogul, H. Frystyk./USA.: Network Working Group 2007.
20 Олифер Н. Базовые технологии локальных сетей/ Н. Олифер, В. Олифер / М.: Центр Информационных Технологий. – 440 с.