/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.transport;
import org.fudgemsg.FudgeContext;
import org.fudgemsg.FudgeMsg;
import org.fudgemsg.FudgeMsgEnvelope;
import org.fudgemsg.mapping.FudgeDeserializer;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.fudgemsg.OpenGammaFudgeContext;
/**
* Receives byte array messages and dispatches them to a {@code FudgeRequestReceiver}.
*/
public class FudgeRequestDispatcher implements ByteArrayRequestReceiver {
/**
* The underlying receiver.
*/
private final FudgeRequestReceiver _underlying;
/**
* The Fudge context.
*/
private FudgeContext _fudgeContext;
/**
* Creates an instance based on an underlying receiver.
*
* @param underlying the underlying receiver, not null
*/
public FudgeRequestDispatcher(FudgeRequestReceiver underlying) {
this(underlying, OpenGammaFudgeContext.getInstance());
}
/**
* Creates an instance based on an underlying receiver.
*
* @param underlying the underlying receiver, not null
* @param fudgeContext the Fudge context, not null
*/
public FudgeRequestDispatcher(FudgeRequestReceiver underlying, FudgeContext fudgeContext) {
ArgumentChecker.notNull(underlying, "underlying");
ArgumentChecker.notNull(fudgeContext, "fudgeContext");
_underlying = underlying;
_fudgeContext = fudgeContext;
}
//-------------------------------------------------------------------------
/**
* Gets the underlying receiver.
*
* @return the underlying receiver, not null
*/
public FudgeRequestReceiver getUnderlying() {
return _underlying;
}
/**
* Gets the Fudge context.
*
* @return the Fudge context, not null
*/
public FudgeContext getFudgeContext() {
return _fudgeContext;
}
//-------------------------------------------------------------------------
@Override
public byte[] requestReceived(byte[] message) {
FudgeMsgEnvelope requestEnvelope = getFudgeContext().deserialize(message);
FudgeDeserializer deserializationContext = new FudgeDeserializer(getFudgeContext());
FudgeMsg responseContainer = getUnderlying().requestReceived(deserializationContext, requestEnvelope);
return getFudgeContext().toByteArray(responseContainer);
}
}