
info.bitrich.xchangestream.gemini.GeminiStreamingService Maven / Gradle / Ivy
The newest version!
package info.bitrich.xchangestream.gemini;
import com.fasterxml.jackson.databind.JsonNode;
import info.bitrich.xchangestream.service.netty.ConnectionStateModel.State;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.subjects.BehaviorSubject;
import io.reactivex.rxjava3.subjects.Subject;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.knowm.xchange.currency.CurrencyPair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** Created by Lukas Zaoralek on 15.11.17. */
public class GeminiStreamingService {
private static final Logger LOG = LoggerFactory.getLogger(GeminiStreamingService.class);
private final String baseUri;
private final Map productStreamingServices =
new ConcurrentHashMap<>();
private final Map> productSubscriptions =
new ConcurrentHashMap<>();
private final Subject stateSubject = BehaviorSubject.create();
public GeminiStreamingService(String baseUri) {
this.baseUri = baseUri;
}
public Observable subscribeChannel(CurrencyPair currencyPair, Object... args) {
if (!productStreamingServices.containsKey(currencyPair)) {
String symbolUri = baseUri + currencyPair.base.toString() + currencyPair.counter.toString();
GeminiProductStreamingService productStreamingService =
new GeminiProductStreamingService(symbolUri, currencyPair);
productStreamingService.connect().blockingAwait();
Observable productSubscription =
productStreamingService.subscribeChannel(currencyPair.toString(), args);
productStreamingServices.put(currencyPair, productStreamingService);
productSubscriptions.put(currencyPair, productSubscription);
productStreamingService.subscribeConnectionState().subscribe(stateSubject);
}
return productSubscriptions.get(currencyPair);
}
public boolean isAlive() {
return productStreamingServices.values().stream().allMatch(ps -> ps.isSocketOpen());
}
public Observable connectionStateObservable() {
return stateSubject.share();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy