All Downloads are FREE. Search and download functionalities are using the official Maven repository.

info.bitrich.xchangestream.coinmate.CoinmateStreamingTradeService Maven / Gradle / Ivy

The newest version!
package info.bitrich.xchangestream.coinmate;

import com.fasterxml.jackson.core.type.TypeReference;
import info.bitrich.xchangestream.coinmate.dto.CoinmateWebSocketUserTrade;
import info.bitrich.xchangestream.coinmate.dto.CoinmateWebsocketOpenOrder;
import info.bitrich.xchangestream.core.StreamingTradeService;
import info.bitrich.xchangestream.service.netty.StreamingObjectMapperHelper;
import info.bitrich.xchangestream.service.pusher.PusherStreamingService;
import io.reactivex.Observable;
import java.util.List;
import org.knowm.xchange.currency.CurrencyPair;
import org.knowm.xchange.dto.Order;
import org.knowm.xchange.dto.trade.OpenOrders;
import org.knowm.xchange.dto.trade.UserTrade;
import org.knowm.xchange.dto.trade.UserTrades;

public class CoinmateStreamingTradeService implements StreamingTradeService {

  private final PusherStreamingService service;
  private final String userId;

  public CoinmateStreamingTradeService(PusherStreamingService service, String userId) {
    this.service = service;
    this.userId = userId;
  }

  @Override
  public Observable getOrderChanges(CurrencyPair currencyPair, Object... args) {
    String channelName =
        "private-open_orders-"
            + userId
            + "-"
            + CoinmateStreamingAdapter.getChannelPostfix(currencyPair);

    return service
        .subscribePrivateChannel(channelName, "open_orders")
        .map(
            (message) -> {
              List websocketOpenOrders =
                  StreamingObjectMapperHelper.getObjectMapper()
                      .readValue(message, new TypeReference>() {});
              return CoinmateStreamingAdapter.adaptWebsocketOpenOrders(
                  websocketOpenOrders, currencyPair);
            })
        .concatMapIterable(OpenOrders::getAllOpenOrders);
  }

  @Override
  public Observable getUserTrades(CurrencyPair currencyPair, Object... args) {
    String channelName =
        "private-user-trades-"
            + userId
            + "-"
            + CoinmateStreamingAdapter.getChannelPostfix(currencyPair);

    return service
        .subscribePrivateChannel(channelName, "user_trades")
        .map(
            (message) -> {
              List webSocketUserTrades =
                  StreamingObjectMapperHelper.getObjectMapper()
                      .readValue(message, new TypeReference>() {});
              return CoinmateStreamingAdapter.adaptWebSocketUserTrades(
                  webSocketUserTrades, currencyPair);
            })
        .concatMapIterable(UserTrades::getUserTrades);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy