Skip to content

kostyaby/Chatterbox

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chatterbox

Web chat application based on Java Servlets and JS.

Описание

Серверная часть чата представляет собой три модели и два сервлета. Модели представляют собой реализацию паттерна ActiveRecord, любезно позаимствованную из пакета org.javalite.activejdbc. Вообще, весь проект собран Apache Maven'ом, так что, по идее, его должно быть очень просто поставить на любую машину. Но мы не пробовали. :)

Описание моделей:

  • User - хранит информацию о пользователе (id, name, password, email, created_at, updated_at). Не волнуйтесь, пароли в открытом виде не хранятся, хранится их MD5-хеш. :)
  • Message - хранит информацию о сообщении (id, user_id, content, created_at, updated_at).
  • MessageEvent - хранит информацию о событиях сообщения (id, message_id, event_type).

Описание сервлетов:

  • MessageServlet - отвечает за HTTP-запросы, связанные с выдачей/изменением моделей Message и MessageEvent.
  • UserServlet - отвечает за HTTP-запросы, связанные с выдачей/изменением моделей User.

Описание процессов:

Аутентификация

Тут все просто - до тех пор, пока пользователь не аутентифицирован, он не может ничего писать в чат, а также просматривать его сообщения. Для входа нужно ввести свой логин и пароль. Если они не пустые, то JS возьмет и отправит сервлету UserServlet логин и MD5-хеш пароля POST-запросом. Если такая пара (логин, хеш пароля) действительно существует в БД, то в качестве ответа на запрос вернется id пользователя, иначе -1. Если JS получил -1 в качестве ответа на запрос, то выдается alert() с соответствующей ошибкой. Если JS получил число, которое не -1, то оно записывает переменные user_id и user_name в сессию. До тех пор, пока в сессии лежит переменная user_id, пользователь будет находится в своей учетке.

Выход из учетки

Если пользователь захочет выйти, то он просто нажмет на кнопку "Выйти" в правом верхнем углу чата. В этом случае, переменные user_id и user_name будут удалены из сессии.

Обновление чата

Ключевая фишка всего чата - его обновление. JS раз в две секунды посылает MessageServlet'у GET-запрос и надеется получить все "свежие" события сообщений. "Свежие" - значит такие, которые произошли со времени последнего подобного GET-запроса. Для этого в JS хранится глобальная переменная lastUpdate, которая представляет собой timestamp - именно она и посылается вместе с запросом.

Событие сообщения может быть одного из трех типов: add_message, update_message и remove_message. Если JS обрабатывает add_message, то он добавит соответствующее сообщение в чат. Если JS обрабатывает update_message, то он добавит просто изменит содержимое уже созданного ранее сообщения в чате. Если JS обрабатывает remove_message, то он удалит соответствующее сообщение из чата.

Таким образом, сообщения хранятся отдельно от всех тех возможных событий, которые могут с ними произойти.

Смена имени пользователя

Если пользователь захочет сменить свое имя, то он просто нажмет на кнопку "Edit" в соответствующей секции чата. В этом случае, по средствам диалога prompt() будет получено новое желаемое имя и отправлено POST-запросом UserServlet'у. Если такое имя уже есть в БД, то сервлет вернет вердикт "wa". Если же это имя свободно, то сервлет с большим удовольствием поменяет текущее имя пользователя и вернет "ok". Также, на каждое сообщение данного пользователя будет сделано MessageEvent типа update_message. Таким образом, при следующем обновлении чата все сообщения данного автора обновят его имя до актуальной версии.

Добавление сообщения

Сообщение отправляется MessageServlet'у POST-запросом. Сервлет создает сообщение, а также делает новый экземпляр события сообщения типа add_message.

Изменение сообщения

По средствам диалога prompt() JS получает новую версию сообщения и отправляет его POST-запросом MessageServlet'у. Сервлет изменят сообщение, а также делает новый экземпляр события сообщения типа update_message. Разумеется, пользователь может изменять только свои сообщения.

Изменение сообщения

JS получает id сообщения, которое пользователь желает удалить, и отправляет его POST-запросом MessageServlet'у. Сервлет создает новый экземпляр события сообщения типа remove_message. Разумеется, пользователь может удалять только свои сообщения.

Установка

Ох, сомневаюсь я, что получится поставить все с первого раза, но если есть желание, то можно попробовать. :)

Для начала, поставьте себе JDK 1.7, Apache Maven, Apache Tomcat и PostgreSQL в базовых комплектациях. После этого, заберите этот проект себе на машину. Затем, запустите PostgreSQL и измените данные в полях класса ServletConstants пакета com.chatterbox.servlets на валидные. После этого, залейте базу данных database.sql в свою PostgreSQL. Затем, перейдите в папку проекта и выполните команды:

  • mvn compile
  • mvn activejdbc-instrumentation:instrument
  • mvn tomcat:run

Если вы все сделали верно, то можете смело открыть свой браузер, ввести localhost:8080/Chat в адресную строку и нажать Enter. Чат работает, вам это удалось!

В database.sql есть три пользователя c паролями, равными своим логинам:

  • kostya_by
  • safari
  • chrome

Регистрация новых пользователей не поддерживается.

Wishlist

Если до этого дойдет, то нужно переписать JS, ибо то, что там написано сейчас, вообще никуда не годится. Скорее всего, переписывать все будет на AngularJS. Осталось только найти время с ним разобраться - и Chatterbox станет еще прекраснее!

Также очень хочется починить скроллинг, но, видимо, в текущем script.js опасно что-то трогать, может все остальные упасть. Так что, видимо, скроллинг если и появится, то после переписывания JS-части.

Авторы

  • Константин Сокол
  • Павел Шефтелевич

ФПМИ, 2 курс, 2 группа

About

Web chat application based on Java Servlets and JS.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published