session.sendData() не удается получить ответ

defor

New Member
Вечер добрый. Пытаюсь реализовать сигналлинг посредство REST хуков. Исходя из моего понимания документации, сложного там вроде ничего нету.
Пока не добавлял свою имплементацию web-сервера. Судя по всему дефолтная имплементация EchoApp должна справиться с простейшим обменом статусами.
Вот пару кусков кода:
1) создается сессия и подписывается на события получения данных и статуса отправки данных
JavaScript:
this.fpService.createSession()
  .on(FpSessionStatusEnum.ESTABLISHED, session => {
    this.fpSession = session;
    startStreaming();
  })
  .on(FpSessionStatusEnum.APP_DATA, data => {
    console.warn(data);
  })
  .on(FpSessionStatusEnum.SEND_DATA_STATUS, status => {
    console.warn(status);
  })
2) простейший метод по отправке фейкового объекта
JavaScript:
public async sendData() {
  try {
    const status = await this.fpSession.sendData({message: 'hello world!'});
    console.warn(status);
  } catch (e) {
    console.error(e)
  }
}
Что мы получаем:
1) fpSession.sendData возвращает статус ACCEPTED
2) FpSessionStatusEnum.APP_DATA и FpSessionStatusEnum.SEND_DATA_STATUS не вызываются в принципе..

Предположил, что одна и та же сессия не получает данных, которые сама отправила. Но приложение, открытое в другой вкладке, а следовательно с другой сессией (на всякий случай сравнивал идентификаторы сессий) также ничего не получает.
Что я делаю не так?)

На всякий случай: дергал напрямую http://<server_url>:8081/apps/EchoApp/OnDataEvent - исправно возвращается то, что что я туда засылал.
 

Max

Administrator
Staff member
Добрый день.
Функция sendData() только отправляет данные бэкенд-серверу. На бэкенд-сервере должен быть настроен REST hook /OnDataEvent, который, поймав сообщение от сессии, разошлет его сессиям-адресатам при помощи REST API вызова /rest-api/data/send
Например, получив объект
Code:
{
  "nodeId" : "4IMwgHbdhZGXEVfBzlTec0GWMCdhs7lO@192.168.130.39",
  "appKey" : "defaultApp",
  "sessionId" : "/192.168.23.83:52590/192.168.130.39:8443-60c8aa8b-6971-4067-aa1a-de824ac920f1",
  "operationId" : "d651c9a0-935c-11ea-914e-0f4f92dc2812",
  "payload" : {
    "message" : "Publish stream"
  },
  "origin" : "https://wcs:8888"
}
нужно дернуть /data/send по количеству адресатов:
Code:
POST /rest-api/data/send HTTP/1.1
Content-Type: application/json
 
{
    "nodeId":"4IMwgHbdhZGXEVfBzlTec0GWMCdhs7lO@192.168.130.39",
    "operationId":"d1999750-fde9-11e6-9f1b-913210792936",
    "sessionId":"/192.168.23.102:15422/192.168.130.39:8443",
    "payload":{
        "message":"Publish stream"
    }
}
sessionId определяются при обработке REST hook /connect и хранятся на бэкенде до получения /ConnectionStatusEvent DISCONNECTED или FAILED.
Пример REST hook приложения для авторизации пользователя можно посмотреть здесь, его также можно использовать как болванку для бэкенда.
 
Top