public QuoteManager(final BitfinexWebsocketClient client, final ExecutorService executorService) { super(client, executorService); this.client = client; this.lastTickerActivity = new ConcurrentHashMap<>(); this.tickerCallbacks = new BiConsumerCallbackManager<>(executorService, client); this.candleCallbacks = new BiConsumerCallbackManager<>(executorService, client); this.tradesCallbacks = new BiConsumerCallbackManager<>(executorService, client); this.pendingSubscribes = new FutureOperationRegistry(); this.pendingUnsubscribes = new FutureOperationRegistry(); client.getCallbacks().onCandlesticksEvent(this::handleCandlestickCollection); client.getCallbacks().onTickEvent(this::handleNewTick); client.getCallbacks().onExecutedTradeEvent((sym, trades) -> trades.forEach(t -> this.handleExecutedTradeEntry(sym, t))); client.getCallbacks().onSubscribeChannelEvent((s) -> pendingSubscribes.handleEvent(s)); client.getCallbacks().onUnsubscribeChannelEvent((s) -> pendingUnsubscribes.handleEvent(s)); }