Добрый день.
Websocket и sendData
WCS работает как Websocket-сервер.
Т.е. можно отправить массив текстовых данных с web-страницы через Websocket на WCS и далее на Web-сервер по REST.
И обратно. WCS можно дать REST-команду отправить объект данных клиенту, имеющему соединение с сервером.
Таким образом, вы можете запаковать ваш слайд в текстовый объект. Например PNG - Base64, и отправить методом sendData(object).
Процесс будет выглядеть так:
1. C HTML-страницы вызывается метод session.sendData(object)
2. WCS перенаправляет этот вызов на ваш Web-сервер на URL /OnDataEvent
3. Ваш скрипт получает данные и парсит из тела HTTP / JSON -запроса
4. Ваш скрипт решает, кому из поключенных к WCS-серверу клиентов перенаправить этот объект.
5. Ваш скрипт обращается к WCS по REST/HTTP адресу
http://host:9091/RestCallback/sendData и передает объект и sessionId коннекта, которому адресован этот объект.
6. Клиент получает событие session.on(SESSION.APP_DATA, function(){...});
REST методы
Для реализации вам нужно обрабатывать на стороне web-сервера как минимум 2 метода
1. /connect
Этот метод несет sessionId
2. /OnDataEvent
В этом методе WCS передает данные, полученные с клиента, вызывающего sendData()
Реализация клиент - сервер
В API flashphoner.js, есть метод session.sendData(object);
https://flashphoner.com/docs/api/WCS5/client/web-sdk/latest/Session.html (API doc)
Его можно вызвать так
Code:
session.sendData({'name':'value'});
В результате WCS отправит REST / HTTP вызов по адресу
http://localhost:9091/EchoApp/OnDataEvent
И в теле HTTP-запроса будет JSON-объект:
Этот вызов подробно расписан на
этой странице.
По-умолчанию, для всех подобных вызвов используется адрес
http://localhost:9091/EchoApp - этот адрес всегда работает как Echo и отдаёт то, что получил.
Вам нужно на стороне веб-сервера написать скрипт, который будет отвечать с Echo на всех адресах:
http://mysite/api/connect
http://mysite/api/pyblishStream
http://mysite/api/playStream
http://mysite/api/OnDataEvent
и т.д.
Далее указываете WCS использовать ваш URL. Создаете маппинг:
Code:
add app myApp myAppKey "http://mysite/api"
Как это сделать показано
здесь.
Теперь при создании сессии, если указать myAppKey, то все REST вызовы будут заворачиваться на ваш URL.
Code:
Flashphoner.createSession({appKey:'myAppKey'});
Реализация сервер - клиент
Вызываете REST / HTTP / POST / application/json метод:
http://host:9091/RestCallback/sendData
И передаете в теле JSON:
Code:
{
nodeId:'...'
sessionId:'..'
operationId:'..'
payload: {'test':'test'}
}
В результате, клиент, которому адресовано это сообщение, получает событие:
session.on(SESSION.APP_DATA,function(){...});
И обрабатывает его (показывает слайд в вашем случае).
Примеры
В итоге нужно реализовать
1. sendData с клиента на сервер
2. sendData с сервера на клиент
Если реализуете, сможете управлять обменам слайдами и другой информацией. Например сообщениями чата, фотографиями, и т.д., т.к. sendData не накладывает ограничений на содержание объектов.
В качестве примера можно привести видеочат, в котором обмен текстовыми сообщениями построен на sendData
https://wcs5-eu.flashphoner.com/demo2/video-chat
Чат использует
room-module.js, который и вызывает sendData
session.sendData(command);
Code:
function sendAppCommand(commandName, data) {
var command = {
command: commandName,
options: data
};
return session.sendData(command);
}
На стороне web-сервера (Tomcat), получение данных от подключенного клиента выглядит так:
Code:
@RequestMapping(value = "/RoomApp/OnDataEvent")
public Map<String, Object> handleRequest(@RequestBody Map<String, Object> params) {
Data data = objectMapper.convertValue(params, Data.class);
...
}
На стороне web-сервера (Tomcat), отправка данных подключенному клиенту выглядит так:
Code:
private void sendEvent(User user, Event event) {
log.info("sendEvent to user " + user.getConnection().getSessionId());
Data data = new Data();
data.setSessionId(user.getConnection().getSessionId());
data.setOperationId(UUID.randomUUID().toString());
data.setPayload(event);
// send data to REST http://host:9091/RestCallback/sendData
}