Передача JSON данных подписчикам потока¶
Описание¶
В сборке 1.1.0.45 добавлена возможность отправить с публикующего клиента сообщение с данными в формате JSON всем подписчикам публикуемого потока, а также получить такое сообщение на играющем клиенте.
Отправка сообщения¶
Для отправки сообщения используется метод Stream.sendData()
. Данные должны представлять собой сериализованный валидный JSON объект
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 данные, которые необходимо разобрать
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