Package com.xeiam.xchange.btcchina.service.fix

Source Code of com.xeiam.xchange.btcchina.service.fix.BTCChinaApplication

package com.xeiam.xchange.btcchina.service.fix;

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

import quickfix.Application;
import quickfix.DoNotSend;
import quickfix.FieldNotFound;
import quickfix.IncorrectDataFormat;
import quickfix.IncorrectTagValue;
import quickfix.Message;
import quickfix.RejectLogon;
import quickfix.Session;
import quickfix.SessionID;
import quickfix.UnsupportedMessageType;
import quickfix.fix44.MarketDataIncrementalRefresh;
import quickfix.fix44.MarketDataSnapshotFullRefresh;
import quickfix.fix44.MessageCracker;

import com.xeiam.xchange.btcchina.BTCChinaAdapters;
import com.xeiam.xchange.currency.CurrencyPair;
import com.xeiam.xchange.dto.marketdata.Ticker;

/**
* {@link Application} implementation for BTCChina.
*/
public class BTCChinaApplication extends MessageCracker implements Application {

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

  private volatile Ticker ticker;

  @Override
  public void fromAdmin(Message message, SessionID sessionId) throws FieldNotFound, IncorrectDataFormat, IncorrectTagValue, RejectLogon {

    log.debug("fromAdmin: {}", message);
  }

  @Override
  public void toAdmin(Message message, SessionID sessionId) {

    log.debug("toAdmin: {}", message);
  }

  @Override
  public void fromApp(Message message, SessionID sessionId) throws FieldNotFound, IncorrectDataFormat, IncorrectTagValue, UnsupportedMessageType {

    log.debug("fromApp: {}", message);

    crack(message, sessionId);
  }

  @Override
  public void toApp(Message message, SessionID sessionId) throws DoNotSend {

    log.debug("toApp: {} {}", sessionId, message);
  }

  @Override
  public void onCreate(SessionID sessionId) {

  }

  @Override
  public void onLogon(final SessionID sessionId) {

    log.debug("onLogon: {}", sessionId);
  }

  @Override
  public void onLogout(SessionID sessionId) {

    log.debug("onLogout: {}", sessionId);
  }

  @Override
  public void onMessage(MarketDataSnapshotFullRefresh message, SessionID sessionId) throws FieldNotFound {

    log.debug("{}", message);

    setTicker(BTCChinaFIXAdapters.adaptTicker(message));
    onTicker(ticker);
  }

  @Override
  public void onMessage(MarketDataIncrementalRefresh message, SessionID sessionId) throws FieldNotFound {

    log.debug("{}", message);

    setTicker(BTCChinaFIXAdapters.adaptUpdate(getTicker(), message));
    onTicker(ticker);
  }

  /**
   * Callback of ticker refreshed.
   *
   * @param ticker the refreshed ticker.
   */
  protected void onTicker(Ticker ticker) {
  }

  public Ticker getTicker() {

    return ticker;
  }

  protected void setTicker(Ticker ticker) {

    this.ticker = ticker;
  }

  public void requestSnapshot(CurrencyPair currencyPair, SessionID sessionId) {

    requestSnapshot(adaptSymbol(currencyPair), sessionId);
  }

  public void requestSnapshot(String symbol, SessionID sessionId) {

    // MARKET DATA SNAPSHOT FULL REFRESH REQUEST (V)
    Message message = BTCChinaMarketDataRequest.marketDataFullSnapRequest(symbol);
    sendMessage(message, sessionId);
  }

  public void requestSnapshotAndUpdates(CurrencyPair currencyPair, SessionID sessionId) {

    requestSnapshotAndUpdates(adaptSymbol(currencyPair), sessionId);
  }

  public void requestSnapshotAndUpdates(String symbol, SessionID sessionId) {

    // MARKET DATA INCREMENTAL REFRESH REQUEST (V)
    Message message = BTCChinaMarketDataRequest.marketDataIncrementalRequest(symbol);
    sendMessage(message, sessionId);
  }

  public void unsubscribe(CurrencyPair currencyPair, SessionID sessionId) {
    unsubscribe(adaptSymbol(currencyPair), sessionId);
  }

  public void unsubscribe(String symbol, SessionID sessionId) {

    // UNSUBSCRIBE MARKET DATA INCREMENTAL REFRESH (V)
    Message message = BTCChinaMarketDataRequest.unsubscribeIncrementalRequest(symbol);
    sendMessage(message, sessionId);
  }

  private void sendMessage(Message message, SessionID sessionId) {

    Session.lookupSession(sessionId).send(message);
  }

  private String adaptSymbol(CurrencyPair currencyPair) {

    return BTCChinaAdapters.adaptMarket(currencyPair).toUpperCase();
  }

}
TOP

Related Classes of com.xeiam.xchange.btcchina.service.fix.BTCChinaApplication

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.