Chat

Chat


Чат приложения состоит из 2 каналов:
1. Связь приложения с сокет-сервером.
2. Связь приложения с бекендом.

Для реализации статусов доставлено/прочитано при подгрузке сообщений с бекенда приложения, необходимо при запросе
https://kitappchat.docs.apiary.io/#reference/0/get-chat-history/get-chat-history

    {
      "id": 11,
      "chat_id": 5,
      "user_id": 5,
      "message": "test",
      "created_at": "2019-05-30 19:21:40",
      "is_read": 0,
      "first_name": "delete",
      "last_name": "user"
    }

считывать параметр is_read у каждого сообщения(где user_id равен текущему пользователю), если он равен 1 - выводить что сообщение прочитано, в противном случае - доставлено.



Логика обработки сообщений чата следующая:

Когда пользователь открывает чат X, (X - chat ID) необходимо сразу слушать этот канал через метод history, вместе с этим отправить запрос на получение истории чата на N последних сообщений(например, количество непрочитанных)
https://kitappchat.docs.apiary.io/#reference/0/get-chat-history/get-chat-history
собрать все id сообщений у которых is_read != 1 в массив и пометить их как прочитанные методом
https://kitappchat.docs.apiary.io/#reference/0/send-messages-statuses-as-read/send-messages-statuses-as-read

Далее, слушать из канала X все новые сообщения(если какие-то сообщения есть на данный момент в history этого канала, игнорируем их).

Если пользователь отправляет сообщение, необходимо в момент отправки проверять дополнительно методом presense канал "X_online" X - chat ID на наличие user_id отличного от текущего(отправителя данного сообщения), если есть, то помечать сообщение как прочитанное, если нет - помечать как доставленное.

При прослушивании же истории добавлять все новые сообщения из канала "X" в конец списка

{
    "result": {
        "publications": [
            {
                "data": {
                    "user_id": 65,
                    "first_name": "Test",
                    "last_name": "_live",
                    "message": "Test"
                }
            }
        ]
    }
}

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


https://github.com/centrifugal/centrifuge-js


















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































Report Page