Package com.xeiam.xchange.coinsetter.service.streaming

Source Code of com.xeiam.xchange.coinsetter.service.streaming.CoinsetterSocketIOServiceRaw

package com.xeiam.xchange.coinsetter.service.streaming;

import io.socket.IOAcknowledge;

import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.xeiam.xchange.ExchangeSpecification;
import com.xeiam.xchange.coinsetter.dto.marketdata.CoinsetterLevel;
import com.xeiam.xchange.coinsetter.dto.marketdata.CoinsetterLevels;
import com.xeiam.xchange.coinsetter.dto.marketdata.CoinsetterPair;
import com.xeiam.xchange.coinsetter.dto.marketdata.CoinsetterTicker;
import com.xeiam.xchange.coinsetter.dto.marketdata.CoinsetterTrade;
import com.xeiam.xchange.coinsetter.dto.trade.CoinsetterOrderStatus;
import com.xeiam.xchange.coinsetter.service.streaming.event.CoinsetterExchangeListener;
import com.xeiam.xchange.coinsetter.service.streaming.event.CoinsetterSocketAdapter;
import com.xeiam.xchange.coinsetter.service.streaming.event.CoinsetterSocketListener;
import com.xeiam.xchange.service.BaseExchangeService;

/**
* Coinsetter Websockets API implementation, fires Coinsetter exchange raw DTO events.
*/
public class CoinsetterSocketIOServiceRaw extends BaseExchangeService {

  private final Logger log = LoggerFactory.getLogger(CoinsetterSocketIOServiceRaw.class);

  private final CoinsetterSocket socket;
  private final Gson gson = new Gson();

  private final List<CoinsetterExchangeListener> exchangeListeners = new ArrayList<CoinsetterExchangeListener>();

  public CoinsetterSocketIOServiceRaw(final ExchangeSpecification exchangeSpecification, final CoinsetterStreamingConfiguration coinsetterStreamingConfiguration) {

    super(exchangeSpecification);

    socket = new CoinsetterSocket(exchangeSpecification, coinsetterStreamingConfiguration);
    socket.addListener(new CoinsetterSocketAdapter() {

      @Override
      public void on(String event, IOAcknowledge ack, JsonElement... args) {

        if (event == null) {
          log.warn("event is null.");
        }
        else if (event.equals("last")) {
          CoinsetterTrade last = gson.fromJson(args[0], CoinsetterTrade.class);
          for (CoinsetterExchangeListener listener : exchangeListeners) {
            listener.onLast(last);
          }
        }
        else if (event.equals("ticker")) {
          CoinsetterTicker ticker = gson.fromJson(args[0], CoinsetterTicker.class);
          for (CoinsetterExchangeListener listener : exchangeListeners) {
            listener.onTicker(ticker);
          }
        }
        else if (event.equals("depth")) {
          CoinsetterPair[] depth = gson.fromJson(args[0], CoinsetterPair[].class);
          for (CoinsetterExchangeListener listener : exchangeListeners) {
            listener.onDepth(depth);
          }
        }
        else if (event.equals("levels")) {
          CoinsetterLevels levels = gson.fromJson(args[0], CoinsetterLevels.class);
          for (CoinsetterExchangeListener listener : exchangeListeners) {
            listener.onLevels(levels);
          }
        }
        else if (event.equals("levels_COINSETTER") || event.equals("levels_SMART")) {
          CoinsetterLevel level = gson.fromJson(args[0], CoinsetterLevel.class);
          for (CoinsetterExchangeListener listener : exchangeListeners) {
            listener.onLevel(level);
          }
        }
        else if (event.startsWith("orders-")) {
          CoinsetterOrderStatus orderStatus = gson.fromJson(args[0], CoinsetterOrderStatus.class);
          for (CoinsetterExchangeListener listener : exchangeListeners) {
            listener.onOrderStatus(orderStatus);
          }
        }
        else {
          log.warn("Unknown event: {}", event);
        }
      }

    });
  }

  public void addListener(CoinsetterSocketListener listener) {

    this.socket.addListener(listener);
  }

  public void addListener(CoinsetterExchangeListener listener) {

    this.exchangeListeners.add(listener);
  }

  public void connect() {

    socket.connect();
  }

  public void disconnect() {

    socket.disconnect();
  }

}
TOP

Related Classes of com.xeiam.xchange.coinsetter.service.streaming.CoinsetterSocketIOServiceRaw

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.