我有这门课。我想,只要在回调中分配 chatHub ,该类的客户端就会获得字段chatHub的实例 connection.connected(() - > chatHub = connection.createHubProxy(“ChatHub”)); chatHub可能为null。我们必须在初始化后尽快将chatHub推送到订阅者; 任何想法?
public class SignalRManager {
private HubProxy chatHub;
public SignalRManager() {
Platform.loadPlatformComponent(new AndroidPlatformComponent());
HubConnection connection = new HubConnection("https://test.chatlasapp.com/signalr/hubs");
connection.stateChanged((connectionState, connectionState2) -> Log.i("SignalR", connectionState.name() + "->" + connectionState2.name()));
connection.closed(() -> {
Log.i("SignalR", "Closed");
chatHub = null;
connection.start();
});
//As soon as HubConnection connected this callback invokes.
connection.connected(() -> chatHub = connection.createHubProxy("ChatHub"));
connection.start();
}
Observable<HubProxy> getHubProxy(){
}
}
我想知道如何正确实现getHubProxy方法? 提前谢谢!
答案 0 :(得分:0)
您可以尽快发出chatHub
个实例,并考虑PublishSubject
。然后getHubProxy
只返回此主题,该主题将配置replay
一个,以便进一步订阅。
public class SignalRManager {
private HubProxy chatHub;
private PublishSubject<HubProxy> subject = PublishSubject.create();
public SignalRManager() {
connection = ... // code removed for clarity
connection.connected(() -> {
chatHub = connection.createHubProxy("ChatHub")
subject.onNext(chatHub);
subject.onCompleted();
});
connection.start();
}
Observable<HubProxy> getHubProxy(){
return subject.replay(1).autoconnect();
}
}
请注意,保留hubProxy作为参数并不是更相关。