in FixAntenna/AdminTool/Commands/Administrative/ChangeSeqNum.cs [27:113]
public override void Execute()
{
Log.Debug("Execute ChangeSeqNum Command");
try
{
var changeSeqNum = (FixAntenna.Fixicc.Message.ChangeSeqNum) Request;
var senderCompId = changeSeqNum.SenderCompID;
if (string.IsNullOrWhiteSpace(senderCompId))
{
SendInvalidArgument("Parameter SenderCompID is required");
return;
}
var targetCompId = changeSeqNum.TargetCompID;
if (string.IsNullOrWhiteSpace(targetCompId))
{
SendInvalidArgument("Parameter TargetCompID is required");
return;
}
var id = new SessionId(senderCompId, targetCompId, changeSeqNum.SessionQualifier);
SessionParameters parameters;
var session = GetFixSession(id);
if (session == null)
{
// use configured session if absent active session
parameters = GetConfiguredSession(id);
if (parameters == null)
{
SendUnknownSession(id);
return;
}
}
else
{
parameters = session.Parameters;
}
var outSeqNumObj = changeSeqNum.OutSeqNum;
var inSeqNumObj = changeSeqNum.InSeqNum;
var outSeqNum = outSeqNumObj == null ? 0 : outSeqNumObj.Value;
var inSeqNum = inSeqNumObj == null ? 0 : inSeqNumObj.Value;
if (outSeqNum < 0 || inSeqNum < 0)
{
SendInvalidArgument("Parameter OutSeqNum or InSeqNum must be not negative");
return;
}
if (outSeqNum >= 0 && outSeqNumObj != null)
{
if (session == null || SessionState.IsDisconnected(session.SessionState))
{
parameters.OutgoingSequenceNumber = outSeqNum;
}
else
{
session.RuntimeState.OutSeqNum = outSeqNum; // In the settings stored next number rather than the current one.
}
if (Log.IsInfoEnabled)
{
Log.Info($"ChangeSeqNum to: OutSeqNum={outSeqNum} for session {id}");
}
}
if (inSeqNum >= 0 && inSeqNumObj != null)
{
if (session == null || SessionState.IsDisconnected(session.SessionState))
{
parameters.IncomingSequenceNumber = inSeqNum;
}
else
{
session.RuntimeState.InSeqNum = inSeqNum; // In the settings stored next number rather than the current one.
}
if (Log.IsInfoEnabled)
{
Log.Info($"ChangeSeqNum to: InSeqNum={inSeqNum} for session {id}");
}
}
SendResponseSuccess(new Response());
}
catch (Exception e)
{
Log.Error(e.Message, e);
SendError(e.Message);
}
}