Работа с сервером

Если вы используете встроенный бэкенд, вам необходимо определить токен с помощью свойства token после успешной авторизации пользователя.

Loading Data

Chat ожидает бэкенд сервер для загрузки чатов, пользователей и сообщений. Передать ссылку на сервер можно с помощью параметра url:

webix.ui({
    view: "chat",
    url:"http://localhost:3200/"
});

Chat использует WebSocket протокол .

Вы можете скачать готовый бэкенд для Chat здесь.

Если у вас нет сервера, вы можете переопределить методы бэкенд сервиса и предоставлять клиентские данные в виде промиса.

Сервис Backend

Сервис Backend это серверная модель, у которой есть методы для запросов на сервер. Они вызываются сервисом Operations при необходимости загрузки или сохранения данных.

Ниже вы найдёте полный список методов.

Как кастомизировать модель Backend

Чтобы менять запросы, получать и обрабатывать ответные данные вы можете:

  • создать свой бэкенд сервис и наследовать его от сервиса по умолчанию;
  • определять и переопределять методы;
  • использовать произвольный бэкенд сервис через свойство override.
class MyBackend extends chat.services.Backend {
    // новые методы 
}
 
webix.ui({
    view: "chat",
    url:"http://localhost:3200/",
    override: new Map([[chat.services.Backend, MyBackend]]),
});

Обработка клиентских данных

Если вы хотите передать в Chat клиентские данные, вам необходимо вернуть промис внутри следующих методов:

class MyBackend extends chat.services.Backend {
  // вы можете перехватывать и кастомизировать серверные запросы
  messages(chatId) {
    return Promise.resolve([
      {
        user_id: 1,
        text: "[Ваше сообщение] Работа в режиме offline",
      }
    ]);
  }
  // other methods
}

Related sample:  Chat: Local Data

Backend Service methods

Помните, что операции по созданию чата/сообщения, редактированию или удалению осуществляются от лица текущего пользователя.

users()

Вызывается при инициализации виджета.

Returns: промис с массивом пользователей:

[
  {
    avatar: "remote/avatars/1.jpg",
    email: "alex@brown.com",
    id: 1,
    name: "Alex Brown",
    status: 2
  },
  { .. }
]

chats()

Метод загружает массив чатов.

Returns: промис с массивом чатов:

[
  {
    avatar: "remote/avatars/photo.jpg",
    date: new Date(),
    direct_id: 17,
    id: 52,
    message: "Выпьем чаю с малиновым вареньем?",
    name: "PM: Jean Catwright",
    unread_count: 0,
    users: [3, 17]
  },
  { .. }
]

addChat(uid)

Метод вызывается при создании нового приватного чата.

Parameters:

  • uid (number) - ID пользователя, с которым текущий пользователь создаёт чат.

Returns: промис с объектом данных созданного чата:

{
  avatar: "remote/avatars/pm.jpg",
  date: new Date(),
  direct_id: 17,
  id: 52,
  message: "Ну и гадость эта ваша заливная рыба!"
  name: "Дом на Новокузнецкой",
  unread_count: 1,
  users: [3, 17]
}

messages(cid)

Метод вызывается при входе пользователя в чат.

Parameters:

  • cid (number) - ID чата, с которого необходимо получить сообщения.

Returns: промис с массивом сообщений:

[
 {
   chat_id: 6,
   date: new Date(),
   id: 19,
   text: "И всё-таки она вертится!",
   user_id: 2
 }
]

addMessage(cid, text, origin)

Метод вызывается при создании нового сообщения.

Parameters:

  • cid (number) - ID чата;
  • text (string) - текст сообщения;
  • origin (number) - клиентское ID сообщения.

Returns: объект сообщения:

{
  chat_id: 31,
  date: new Date(),
  id: 75,
  text: "Глаголом жги сердца людей!",
  user_id: 3
}

removeMessage(messageId)

Метод вызывается при удалении указанного сообщения.

Parameters:

  • messageId (number) - ID сообщения.

Returns: объект сообщения:

{
  chat_id: 31,
  date: new Date(),
  id: 71,
  text: "",
  user_id: 0
}

updateMessage(messageId, text)

Метод вызывается при обновлении указанного сообщения.

Parameters:

  • messageId (number) - ID сообщения;
  • text (string) - текст сообщения.

Returns: объект сообщения:

{
  chat_id: 31,
  date: new Date(),
  id: 76,
  text: "А судьи кто?",
  user_id: 3
}

resetCounter(cid)

Метод сбрасывает счётчик непрочитанных сообщений в указанном чате.

Parameters:

  • cid (number) - ID чата.

Метод не возвращает никаких данных.

addGroupChat(name, avatar, users)

Метод вызывается при создании группового чата.

Parameters:

  • name (number) - имя чата;
  • avatar (string) - URL для загрузки аватара;
  • users (array) - ID приглашённых пользователей.

Returns: промис с объектом чата:

{
  avatar: "remote/avatars/picture.jpg",
  date: new Date(),
  direct_id: 0,
  id: 61,
  message: "",
  name: "Hikikomori",
  unread_count: 0,
  users: [4, 5, 3, 1, 87]
}

updateChat(chatId, name, avatar)

Метод вызывается при обновлении указанного чата.

Parameters:

  • chatId (number) - ID чата;
  • name (string) - имя чата;
  • avatar (string) - URL для загрузки аватара.

Returns: промис с объектом чата:

{
  avatar: "remote/avatars/another_picture.jpg",
  date: new Date(),
  direct_id: 0,
  id: 61,
  message: "",
  name: "Новый чат", 
  unread_count: 0,
  users: [4, 5, 3, 1, 87]
}

leave(chatId, userId)

Метод вызывается, когда пользователь покидает чат.

Parameters:

  • chatId (number) - ID чата;
  • userId (number) - ID пользователя.

Returns: null, если пользователь успешно покинул чат.

setUsers(chatId, users)

Метод вызывается, когда текущий пользователь добавляет/удаляет другого пользователя

Parameters:

  • chatId (number) - ID чата
  • users (array) - ID учатников чата.

Returns: промис с объектом чата:

{
  avatar: "remote/avatars/another_picture.jpg",
  date: new Date(),
  direct_id: 0,
  id: 61,
  message: "Огласите весь список, пожалуйста",
  name: "Подработка", 
  unread_count: 0,
  users: [4, 5, 3, 1, 87]
}

avatarUploadUrl()

Метод возвращает URL для загрузки аватаров чатов.

Returns: url строку для загрузки.

this.app.config.url + "/chat/0/avatar";
Наверх