package com.activequant.trading; import org.apache.log4j.Logger; import com.activequant.domainmodel.TimeFrame; import com.activequant.domainmodel.exceptions.TransportException; import com.activequant.interfaces.transport.IReceiver; import com.activequant.interfaces.transport.ITransportFactory; import com.activequant.interfaces.utils.IEventListener; import com.activequant.messages.AQMessages.BaseMessage; import com.activequant.messages.AQMessages.BaseMessage.CommandType; import com.activequant.messages.AQMessages.ValueSet; import com.activequant.messages.Marshaller; /** * Convenience wrapper to subscribe to value set feeds * * @author GhostRider * */ public class ValueSetAdapter { private Marshaller marshaller = new Marshaller(); private Logger log = Logger.getLogger(ValueSetAdapter.class); private final String channel; private final ITransportFactory transFac; /** * Internal event listener, this one will dispatch data on. */ private IEventListener<byte[]> rawListener = new IEventListener<byte[]>() { @Override public void eventFired(byte[] event) { BaseMessage bm; try { bm = marshaller.demarshall(event); if (bm.getType().equals(CommandType.VALUESET)) { ValueSet vs = bm.getExtension(ValueSet.cmd); handle(vs); } } catch (Exception e) { e.printStackTrace(); log.warn("Exception: ", e); } } }; /** * override this in your class. * * @param mds */ public void handle(ValueSet vs) { if (log.isDebugEnabled()) log.debug("Received value set: " + vs); } /** * public constructor. * * @param mdi * @param transFac */ public ValueSetAdapter(String channel, ITransportFactory transFac) { this.channel = channel; this.transFac = transFac; } /** * Use it to start a feed. * * @throws TransportException */ public void start() throws TransportException { IReceiver r = transFac.getReceiver(channel); r.getRawEvent().addEventListener(rawListener); } }