Перейти к содержанию

Передача JSON данных подписчикам потока

Описание

В сборке 1.1.0.45 добавлена возможность отправить с публикующего клиента сообщение с данными в формате JSON всем подписчикам публикуемого потока, а также получить такое сообщение на играющем клиенте.

Отправка сообщения

Для отправки сообщения используется метод Stream.sendData(). Данные должны представлять собой сериализованный валидный JSON объект

code

mSendDataButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        if (publishStream == null) {
            return;
        }
        ...
        ObjectMapper objectMapper = new ObjectMapper();
        Map<String, Object> data = null;
        try {
            data = objectMapper.readValue(dataStr, HashMap.class);
        } catch (IOException e) {
            Log.w(TAG, "Not valid json string");
            ...
            return;
        }
        publishStream.sendData(data);
    }
});

Прием сообщения

Для приема сообщения необходимо в обработчике onStreamEvent проверить: если тип полученного сообщения StreamEventType, то сообщение содержит сериализованные JSON данные, которые необходимо разобрать

code

playStream.on(new StreamEventHandler() {
    ...
    @Override
    public void onStreamEvent(StreamEvent streamEvent) {
        if (StreamEventType.data.equals(streamEvent.getType())) {
            parseReceivedData(streamEvent.getPayload());
        }
    }
});
...
private void parseReceivedData(Map<String, Object> data) {
    runOnUiThread(() -> {
        Date date = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
        StringBuilder stringBuilder = new StringBuilder(formatter.format(date) + " - ");
        for (Map.Entry<String, Object> obj : data.entrySet()) {
            stringBuilder.append(obj.getKey()).append("=").append(obj.getValue()).append(", ");
        }
        stringBuilder.delete(stringBuilder.length() - 2, stringBuilder.length());

        mReceivedDataTextView.setText(stringBuilder);
    });
}

Таким же образом может быть принято сообщение, отправленное из Web SDK или по REST API