/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.transport; import java.io.InputStream; import org.fudgemsg.FudgeContext; import org.fudgemsg.FudgeMsg; import org.fudgemsg.FudgeMsgEnvelope; import org.fudgemsg.wire.FudgeMsgReader; import com.opengamma.util.ArgumentChecker; import com.opengamma.util.fudgemsg.OpenGammaFudgeContext; /** * Listens to an {@link InputStream}, splits the stream into individual * {@link FudgeMsg}s, and then dispatches them to a {@link FudgeMessageReceiver}. * Must be run in its own thread. */ public class InputStreamFudgeMessageDispatcher implements Runnable { private final InputStream _inputStream; private final FudgeMessageReceiver _messageReceiver; private final FudgeContext _fudgeContext; private final FudgeMsgReader _fudgeMsgReader; public InputStreamFudgeMessageDispatcher(InputStream inputStream, FudgeMessageReceiver messageReceiver) { this(inputStream, messageReceiver, OpenGammaFudgeContext.getInstance()); } public InputStreamFudgeMessageDispatcher(InputStream inputStream, FudgeMessageReceiver messageReceiver, FudgeContext fudgeContext) { ArgumentChecker.notNull(inputStream, "inputStream"); ArgumentChecker.notNull(messageReceiver, "messageReceiver"); ArgumentChecker.notNull(fudgeContext, "fudgeContext"); _inputStream = inputStream; _messageReceiver = messageReceiver; _fudgeContext = fudgeContext; _fudgeMsgReader = fudgeContext.createMessageReader(inputStream); } /** * Gets the inputStream. * @return the inputStream */ public InputStream getInputStream() { return _inputStream; } /** * Gets the messageReceiver. * @return the messageReceiver */ public FudgeMessageReceiver getMessageReceiver() { return _messageReceiver; } /** * Gets the fudgeContext. * @return the fudgeContext */ public FudgeContext getFudgeContext() { return _fudgeContext; } /** * Gets the fudgeMsgReader. * @return the fudgeMsgReader */ public FudgeMsgReader getFudgeMsgReader() { return _fudgeMsgReader; } @Override public void run() { while (true) { FudgeMsgEnvelope msgEnvelope = getFudgeMsgReader().nextMessageEnvelope(); if (msgEnvelope == null) { // End of stream reached. break; } getMessageReceiver().messageReceived(getFudgeContext(), msgEnvelope); } } }