From 53d6ce9697e3482ef5f823a0bca14580a65b5fba Mon Sep 17 00:00:00 2001 From: ChronosX88 Date: Wed, 9 May 2018 14:41:45 +0300 Subject: [PATCH] Update API.md --- API.md | 70 +++++++++++++++++++++++++++++++------------------------ README.md | 12 +--------- 2 files changed, 40 insertions(+), 42 deletions(-) diff --git a/API.md b/API.md index 18941f7..3e6e3b7 100644 --- a/API.md +++ b/API.md @@ -1,4 +1,4 @@ -P2P-мессенджер. Протокол обмена +Протокол обмена. =============================== ## Структура сети: @@ -13,9 +13,9 @@ GUI - примитивная программа под Linux/Window/Android, к На сервере также хранится история переписки. У сервера есть список контактов (друзей), в формате: -``` +```json { - "адрес1": {nick: "", last_online: "", last_connect: "", can_resend: 1, key: "", other_info:... } + "адрес1": { "nick":"", "last_online":"", "last_connect":"", "can_resend":1, "key":"", "other_info":... } ... } ``` @@ -29,58 +29,66 @@ GUI - примитивная программа под Linux/Window/Android, к 1. Добавление в друзья Используется, чтобы установить связь с контактом. Для этого запрашиваем у него ключ доступа, предварительно отправив свой. -``` -{action: "handshake", key: "пароль"} +```json +{ "action":"handshake", "key":"пароль" } ``` ответ -``` -{status: 1} +```json +{ "status": 1 } ``` Когда один отправил запрос - то второй может отправить свой ключ и тогда сервера смогут общаться друг с другом. -2. Отправка сообщения: -``` -{action:"send", from: "адрес", to: "адрес", message: "сообщение", timestamp: "время", enctype: "", key: "" } +### Отправка сообщения + +Структура сообщения в JSON: + +```json +{ "action":"send", "from":"адрес", "to":"адрес", "message":"сообщение", "timestamp":"время", "enctype":"", "key":"" } ``` ответ: -``` -{status: 1} +```json +{ "status": 1 } ``` Сообщение может быть зашифровано, метод шифрования в поле enctype. Если нет ответа, то сохраняем сообщение у себя в истории, чтобы потом переотправить. `status==1` - доставлено, другой - недоставлено (помечаем как недоставлено -3. Пинг - проверка онлайн +### Пинг - проверка онлайна + Если прошло время больше чем last_connect + 1 минута, от отправляем запрос -``` -{action: "ping"} + +```json +{ "action":"ping" } ``` ответ: -``` -{action: "pong"} +```json +{ "action":"pong" } ``` -4. Если у нас есть сообщения для адреса и он онлайн (last_connect < 1 минуты), то передаём их +Если у нас есть сообщения для адреса и он онлайн (last_connect < 1 минуты), то передаём их Если для этого адрес в базе есть недоставленные сообщения, то отправляем такой запрос: + +```json +{ "action": "history", "messages":[{},{},{}...] } ``` -{action: "history", messages:[{},{},{}...]} -``` -ответ -``` -{status:[1,1,1,0,1]} +ответ: +```json +{ "status":[1,1,1,0,1] } ``` В ответ приходит массив с 1 или 0. Если 1 - сообщение сохранено успешно, 0 - ошибка и его нужно потом переотправить. -5. Отправить сообщение для другого абонента (это нужно чтобы отправлять тем, кто в offline) -Если человек, которому мы отправляем сообщение offline - то во-первых оно сохраняется у себя на сервере, для последующей отправки. -Во-вторых, можно попросить какого-то друга его переотправить. Для этого выбираем случайно несколько друзей из списка контактов, у которых can_resend == 1 и отправляем им запрос. +### Отправление сообщения для другого абонента (это нужно чтобы отправлять тем, кто в offline) + +Если человек, которому мы отправляем сообщение offline - то, во-первых, оно сохраняется у себя на сервере, для последующей отправки. +Во-вторых, можно попросить какого-то друга его переотправить. Для этого выбираем случайно несколько друзей из списка контактов, у которых `can_resend == 1` и отправляем им запрос. Для ретрансляции можно также использовать свой сервер в интернете, нужно просто его добавить в контакты. -``` -{action: "resend", ...} + +```json +{ "action":"resend", ... } ``` Параметры такие же как и для send ответ +```json +{ "status":1 } ``` -{status: 1} -``` -Если status: 0 - то эта нода не желает пересылать сообщения и ей повторно отправлять не нужно. +Если `status == 0` - то эта нода не желает пересылать сообщения и ей повторно отправлять не нужно. diff --git a/README.md b/README.md index 3476c21..ac7ae34 100644 --- a/README.md +++ b/README.md @@ -6,14 +6,4 @@ При создании чата, будет генерироваться ключ шифрования и отправляться участникам чата (или получателю, если это не групповой чат). После чего, все сообщения в чате будут шифроваться этим ключом шифрования. -### Структура сообщения в JSON - -{ - "msgID": 1, - "peerID":"fcec:ae97:8902:d810:6c92:ec67:efb2:3ec5", - "msgText":"VJU02Om8ow==" -} - -**msgID** - ID сообщения в чате -**peerID** - IPv6 отправителя сообщения -**msgText** - зашифрованный текст сообщения (метод шифрования - Blowfish, ключ шифрования - тот, который был создал в начале чата.) \ No newline at end of file +По контактам будет создаваться сколько угодно чатов. Более подробно о технической части [тут](https://github.com/ChronosX88/HyperboriaIM-doc/blob/master/API.md).