Я использую библиотеку WebSocket Rails-Android от ararog.
Я подписываюсь на несколько каналов в цикле на основе данных, которые я получаю со стороны сервера. Я использую один и тот же WebSocketRailsDataCallback для всех каналов, и единственным отличием является имя канала. Моя проблема в том, что данные обратного вызова onDataAvailable(Object data)
содержат только полученный JSON, который не содержит имени канала, и мне не удалось найти способ узнать, на каком канале был получен ответ.
Я попытался создать собственный интерфейс и класс, который расширяет WebSocketRailsDataCallback и WebSocketRailsChannel соответственно с подписью onDataAvailable(Object data, String channelName)
и переопределенным методом dispatch
, но переменные класса являются закрытыми, что означает, что я не могу иметь конструктор, подобный следующему, и, следовательно, не могу привести WebSocketRailsChannel к пользовательский класс:
public CustomWebSocketRailsChannel(WebSocketRailsChannel channel)
{
super(/*channel arguments*/);
}
Я могу получить поля, используя getDeclaredFields()
в методах, но это не помогает мне с приведением (что мне нужно, потому что метод dispatcher.subscribe
возвращает базовый класс). Следующим решением, о котором я подумал, было создание полных пользовательских классов для всех соответствующих классов (диспетчер, канал, dataCallback и т. д.) вместо того, чтобы наследовать его, но это грубое решение. Другой связывается с автором библиотеки. Любая лучшая и более простая идея будет оценена.