Skip to content

ArthurGaleev/GitHubMessenger

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 

Repository files navigation

GitHub messenger

Участники: Артур Галеев


Задача

Сделать мессенджер для терминала. Переписка будет осуществляться посредством коммитов в Git репозиторий, соответственно пользоваться чатом можно будет подключившись к репозиторию по ключу. Также будут реализованы беседы из N участников, личная переписка и другие функции (см. функционал).

Мотивация

Конечно, проект имеет скорее обучающие предпосылки, нежели практические. Но всё же любителям пользоваться компьютером исключительно при помощи терминала может прийтись по душе. К тому же, если вы, например, запустили какую-то новую виртуалку и нужно срочно приступить к проекту, то у вас из коробки (при подключении к репозиторию) будет доступна возможность быстрой коммуникации между участниками (хотя бы для быстрого взаимного copy/pastе обмена кодом).

Функционал

  • отправлять сообщение - коммит
  • создавать чат на N $\ge$ 2 человек - отдельная ветка
  • добавлять/исключать участников из чата
  • выдавать N последних сообщений чата
  • отвечать на конкретное сообщение
  • TBD

План работы

  • Изучить вопрос в целом, выбрать средства для реализации
    • был выбран язык c, а именно использование библиотеки libgit2 (возможно для удобства перейду на аналог cppgit2 для c++)
    • изучены необходимые функции, например: git_commit_create, git_revwalk, git_commit_message
    • первые представление о классе пользователя: имя, группы, права (tba)
  • Сделать коммит сообщения, полученного его вводом в терминал
  • Получать записанные коммиты, выводить их в терминале
  • Добавить пользователей
  • Добавить возможность писать сообщения (коммитить) в разные чаты (ветки)
  • Решить проблему с приватностью чатов (предоставлять доступ определённым пользователям)
  • Сделать дополнительные фичи

Реализация (на 12.05):

Легче всего оказалось работать с исходной версией библиотеки libgit2, написанной на C (легче установка и меньше проблем при сборке, т.к. надстройки на ней для C++ оказались немного проблемными). Установить можно на Ubuntu следующим образом:

sudo apt-get install libgit2-dev

У меня по всей видимости уже была библиотека, связанная с libgit2 - git2. Поэтому всё притянулось туда.Также для сборки нужно добавить в Cmake расположение заголовочных файлов, директорию, где содержатся необходимые библиотеки, и связь текущего проекта с этим git2 (на разных системах могут быть разные директории):

include_directories(/usr/lib/git2)
link_directories(/usr/lib/x86_64-linux-gnu)
target_link_libraries(GitHubMessenger git2)

Пока что удалось собрать commit для исходного репозитория и текущего пользователя: расставить указатель на коммит, указатель на index файл репозитория, указать сигнатуру (имя и почта авотра и того, кто делает коммит) и само сообщение коммита.

git_commit_create_v(&commit_id, repo, "HEAD", *signature, *signature, "utf-8", message.c_str(), tree, 1, parent)

В коде выше в commit_id запишется oid (object id) выполненного коммита; repo - передаем сам репозиторий; "HEAD" говорит о том, что будет обновлён HEAD и сдвинут на новый коммит; и автор и коммитер в данном случае один и тот же, поэтому в обооих местах signature; кодировка сообщение - utf-8 (вообще она по умолчанию такая, можно было просто NULL написать); сообщение коммита; некое дерево комиита (пока не до конца понятно что это); кол-во родителей.


Реализация (на 16.05):

  1. Комнаты создаются локально, но так и не удалось решить проблему с пушем их в remote репозиторий.

Комната создаётся через commit_create и требует только имени комнаты от пользователя, который присоединяется к существующей комнате или создает свою (в случае отсутствия комнаты с введенным именем). 2. После присоединения к комнате пользователь имеет две команды: отправить сообщение, показать историю сообщений.

Они реализованы при помощи соответствующих функций: add_message (требует ввести сообщение), get_history.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors