/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.livedata.server;
import org.fudgemsg.FudgeContext;
import org.fudgemsg.FudgeMsg;
import org.fudgemsg.FudgeMsgEnvelope;
import org.fudgemsg.mapping.FudgeDeserializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.opengamma.livedata.msg.Heartbeat;
import com.opengamma.transport.ByteArrayMessageReceiver;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.fudgemsg.OpenGammaFudgeContext;
/**
* Receives heartbeat messages and extends the subscription time.
*/
public class HeartbeatReceiver implements ByteArrayMessageReceiver {
/** Logger. */
private static final Logger s_logger = LoggerFactory.getLogger(HeartbeatReceiver.class);
/**
* The expiration manager.
*/
private final ExpirationManager _activeSecurityPublicationManager;
/**
* The Fudge context.
*/
private final FudgeContext _fudgeContext;
/**
* Creates an instance with an expiration manager.
*
* @param activeSecurityPublicationManager the manager, not null
*/
public HeartbeatReceiver(ExpirationManager activeSecurityPublicationManager) {
this(activeSecurityPublicationManager, OpenGammaFudgeContext.getInstance());
}
/**
* Creates an instance with an expiration manager.
*
* @param activeSecurityPublicationManager the manager, not null
* @param fudgeContext the Fudge context, not null
*/
public HeartbeatReceiver(ExpirationManager activeSecurityPublicationManager, FudgeContext fudgeContext) {
ArgumentChecker.notNull(activeSecurityPublicationManager, "activeSecurityPublicationManager");
ArgumentChecker.notNull(fudgeContext, "fudgeContext");
_activeSecurityPublicationManager = activeSecurityPublicationManager;
_fudgeContext = fudgeContext;
}
//-------------------------------------------------------------------------
/**
* Gets the Fudge context.
*
* @return the Fudge context, not null
*/
public FudgeContext getFudgeContext() {
return _fudgeContext;
}
/**
* Gets the manager.
*
* @return the active security publication manager, not null
*/
public ExpirationManager getActiveSecurityPublicationManager() {
return _activeSecurityPublicationManager;
}
//-------------------------------------------------------------------------
@Override
public void messageReceived(byte[] message) {
FudgeMsgEnvelope heartbeatEnvelope = getFudgeContext().deserialize(message);
FudgeMsg heartbeatMsg = heartbeatEnvelope.getMessage();
messageReceived(heartbeatMsg);
}
public void messageReceived(FudgeMsg msg) {
Heartbeat heartbeat = Heartbeat.fromFudgeMsg(new FudgeDeserializer(_fudgeContext), msg);
s_logger.debug("Heartbeat received for: {}", heartbeat.getLiveDataSpecifications());
getActiveSecurityPublicationManager().extendPublicationTimeout(heartbeat.getLiveDataSpecifications());
}
}