An open API service indexing awesome lists of open source software.

https://github.com/andezion/retromessenger


https://github.com/andezion/retromessenger

ciphers cpp cryptography messenger retro wxwidgets

Last synced: 5 months ago
JSON representation

Awesome Lists containing this project

README

          

# RetroMessenger

P2P (peer-to-peer) мессенджер на C++ с графическим интерфейсом на базе wxWidgets и прямыми соединениями через Boost.Asio.

## Особенности

- **Прямые P2P соединения** - клиенты соединяются напрямую друг с другом без централизованного сервера
- **Система приглашений** - безопасное установление соединений через обмен приглашениями
- **Множественные чаты** - поддержка нескольких одновременных P2P чатов
- **Автоматическая смена ID** - генерация нового уникального ID после каждого соединения для приватности
- **Графический интерфейс** - удобный GUI на wxWidgets с вкладками для разных чатов

## Компоненты

- **RetroMessenger** - GUI P2P клиент на wxWidgets
- **ChatServer** - опциональный централизованный сервер (для группового чата)

## Сборка

```bash
cd build
cmake ..
make
```

## Запуск

### P2P режим (рекомендуется)

```bash
cd build
./RetroMessenger
```

Каждый клиент автоматически создает свой listening порт. Порт отображается в заголовке окна.

## Зависимости

- **CMake** >= 3.10
- **C++17** компилятор (g++, clang++)
- **wxWidgets** >= 3.0
- **Boost** (components: system)
- **Threads**

### Установка зависимостей

Ubuntu/Debian:
```bash
sudo apt install build-essential cmake libwxgtk3.0-gtk3-dev libboost-system-dev
```

## Использование

### Создание P2P соединения

1. Запустите первый клиент: `./RetroMessenger`
- Запомните порт (например, 39181) и имя пользователя (например, User1)

2. Запустите второй клиент в другом терминале
- Запомните его порт (например, 37299) и имя (например, User2)

3. В первом клиенте нажмите **"Start New Chat"**:
- Введите имя пользователя второго клиента: `User2`
- Введите порт второго клиента: `37299`
- Нажмите OK

4. Второй клиент получит приглашение - нажмите **"Yes"** для принятия

5. Теперь оба клиента могут обмениваться сообщениями!

### Множественные чаты

- Каждый клиент может иметь несколько активных P2P соединений одновременно
- Переключайтесь между чатами в списке слева
- После установления соединения ваш User ID автоматически меняется для приватности

## Архитектура

### P2P клиент (RetroMessenger)
- **Асинхронный сетевой модуль** на Boost.Asio
- **Listening acceptor** - принимает входящие соединения от других клиентов
- **P2P сессии** - управление множественными прямыми соединениями
- **Протокол приглашений**:
- `INVITE:username:user_id` - запрос на установление соединения
- `ACCEPT:username:user_id` - подтверждение соединения
- `REJECT` - отклонение приглашения
- **Сообщения** - текстовые данные, разделенные символом новой строки `\n`
- **GUI на wxWidgets** - интуитивный интерфейс с поддержкой вкладок

### Безопасность
- Каждый клиент генерирует уникальный ID при запуске
- ID автоматически обновляется после каждого нового соединения
- Прямые P2P соединения без посредников