/** * This method can be used to manually logon to a FIX session. */ public void logon() { state.clearLogoutReason(); setEnabled(true); }
/** * Remove messages from messageQueue up to a given sequence number. * * @param seqnum up to which sequence number messages should be deleted */ public void dequeueMessagesUpTo(int seqnum) { for (int i = 1; i < seqnum; i++) { dequeue(i); } }
private void enqueueMessage(final Message msg, final int msgSeqNum) { state.enqueue(msgSeqNum, msg); getLog().onEvent("Enqueued at pos " + msgSeqNum + ": " + msg); }
final boolean logonReceived = state.isLogonReceived(); final boolean logonSent = state.isLogonSent(); if (!state.isInitiator()) { setEnabled(true); state.setLogonReceived(false); state.setLogonSent(false); state.setLogoutSent(false); state.setLogoutReceived(false); state.setResetReceived(false); state.setResetSent(false); state.clearQueue(); state.clearLogoutReason(); state.setResendRange(0, 0);
if (!state.isLogoutSent()) { getLog().onEvent("Initiated logout request"); generateLogout(state.getLogoutReason()); lastSessionTimeCheck = now; if (!isSessionTime()) { if (state.isResetNeeded()) { if (!state.isLogonReceived()) { if (state.isLogonSendNeeded()) { if (isTimeToGenerateLogon()) { } else if (state.isLogonAlreadySent() && state.isLogonTimedOut()) { disconnect("Timed out waiting for logon response", true); if (state.getHeartBeatInterval() == 0) { return; if (state.isLogoutTimedOut()) { disconnect("Timed out waiting for logout response", true); if (state.isTimedOut()) { if (!disableHeartBeatCheck) { disconnect("Timed out waiting for heartbeat", true); if (state.isTestRequestNeeded()) { generateTestRequest("TEST"); getLog().onEvent("Sent test request TEST"); stateListener.onMissedHeartBeat();
UnsupportedMessageType, IOException { state.setLastReceivedTime(SystemTime.currentTimeMillis()); state.clearTestRequestCounter(); if ((checkTooHigh) && state.isResendRequested()) { final ResendRange range; synchronized (state.getLock()) { range = state.getResendRange(); if (msgSeqNum >= range.getEndSeqNo()) { getLog().onEvent( "ResendRequest for messages FROM " + range.getBeginSeqNo() + " TO " + range.getEndSeqNo() + " has been satisfied."); state.setResendRange(0, 0, 0);
private boolean generateLogon() throws IOException { final Message logon = messageFactory.create(sessionID.getBeginString(), MsgType.LOGON); logon.setInt(EncryptMethod.FIELD, 0); logon.setInt(HeartBtInt.FIELD, state.getHeartBeatInterval()); if (sessionID.isFIXT()) { logon.setField(DefaultApplVerID.FIELD, senderDefaultApplVerID); } if (isStateRefreshNeeded(MsgType.LOGON)) { getLog().onEvent("Refreshing message/state store at logon"); getStore().refresh(); stateListener.onRefresh(); } if (resetOnLogon) { resetState(); } if (isResetNeeded()) { logon.setBoolean(ResetSeqNumFlag.FIELD, true); } state.setLastReceivedTime(SystemTime.currentTimeMillis()); state.clearTestRequestCounter(); state.setLogonSent(true); logonAttempts++; if (enableNextExpectedMsgSeqNum) { final int nextExpectedMsgNum = getExpectedTargetNum(); logon.setInt(NextExpectedMsgSeqNum.FIELD, nextExpectedMsgNum); state.setLastExpectedLogonNextSeqNum(nextExpectedMsgNum); } return sendRaw(logon, 0); }
+ newSequence); if (newSequence > getExpectedTargetNum()) { state.setNextTargetMsgSeqNum(newSequence); final ResendRange range = state.getResendRange(); if (range.isChunkedResendRequest()) { if (newSequence >= range.getCurrentEndSeqNo() state.dequeueMessagesUpTo(newSequence); } else if (newSequence < getExpectedTargetNum()) {
private boolean nextQueued(int num) throws FieldNotFound, RejectLogon, IncorrectDataFormat, IncorrectTagValue, UnsupportedMessageType, IOException, InvalidMessage { final Message msg = state.dequeue(num); if (msg != null) { getLog().onEvent("Processing queued message: " + num); final String msgType = msg.getHeader().getString(MsgType.FIELD); if (MsgType.LOGON.equals(msgType) || MsgType.RESEND_REQUEST.equals(msgType)) { // Logon and ResendRequest processing has already been done, so we just need to increment the target seqnum. state.incrNextTargetMsgSeqNum(); } else { nextQueued(msg, msgType); } return true; } return false; }
public Date getStartTime() throws IOException { return state.getCreationTime(); }
state = new SessionState(this, engineLog, heartbeatInterval, heartbeatInterval != 0, messageStore, testRequestDelayMultiplier);
state.get(beginSeqNo, endSeqNo, messages); } catch (final IOException e) { if (forceResendWhenCorruptedStore) {
final boolean logonReceived = state.isLogonReceived(); final boolean logonSent = state.isLogonSent(); if (!state.isInitiator()) { setEnabled(true); state.setLogonReceived(false); state.setLogonSent(false); state.setLogoutSent(false); state.setLogoutReceived(false); state.setResetReceived(false); state.setResetSent(false); state.clearQueue(); state.clearLogoutReason(); state.setResendRange(0, 0);
if (!state.isLogoutSent()) { getLog().onEvent("Initiated logout request"); generateLogout(state.getLogoutReason()); lastSessionTimeCheck = now; if (!isSessionTime()) { if (state.isResetNeeded()) { if (!state.isLogonReceived()) { if (state.isLogonSendNeeded()) { if (isTimeToGenerateLogon()) { } else if (state.isLogonAlreadySent() && state.isLogonTimedOut()) { disconnect("Timed out waiting for logon response", true); if (state.getHeartBeatInterval() == 0) { return; if (state.isLogoutTimedOut()) { disconnect("Timed out waiting for logout response", true); if (state.isTimedOut()) { if (!disableHeartBeatCheck) { disconnect("Timed out waiting for heartbeat", true); if (state.isTestRequestNeeded()) { generateTestRequest("TEST"); getLog().onEvent("Sent test request TEST"); stateListener.onMissedHeartBeat();
UnsupportedMessageType, IOException { state.setLastReceivedTime(SystemTime.currentTimeMillis()); state.clearTestRequestCounter(); if ((checkTooHigh) && state.isResendRequested()) { final ResendRange range; synchronized (state.getLock()) { range = state.getResendRange(); if (msgSeqNum >= range.getEndSeqNo()) { getLog().onEvent( "ResendRequest for messages FROM " + range.getBeginSeqNo() + " TO " + range.getEndSeqNo() + " has been satisfied."); state.setResendRange(0, 0, 0);
private boolean generateLogon() throws IOException { final Message logon = messageFactory.create(sessionID.getBeginString(), MsgType.LOGON); logon.setInt(EncryptMethod.FIELD, 0); logon.setInt(HeartBtInt.FIELD, state.getHeartBeatInterval()); if (sessionID.isFIXT()) { logon.setField(DefaultApplVerID.FIELD, senderDefaultApplVerID); } if (isStateRefreshNeeded(MsgType.LOGON)) { getLog().onEvent("Refreshing message/state store at logon"); getStore().refresh(); stateListener.onRefresh(); } if (resetOnLogon) { resetState(); } if (isResetNeeded()) { logon.setBoolean(ResetSeqNumFlag.FIELD, true); } state.setLastReceivedTime(SystemTime.currentTimeMillis()); state.clearTestRequestCounter(); state.setLogonSent(true); logonAttempts++; if (enableNextExpectedMsgSeqNum) { final int nextExpectedMsgNum = getExpectedTargetNum(); logon.setInt(NextExpectedMsgSeqNum.FIELD, nextExpectedMsgNum); state.setLastExpectedLogonNextSeqNum(nextExpectedMsgNum); } return sendRaw(logon, 0); }
+ newSequence); if (newSequence > getExpectedTargetNum()) { state.setNextTargetMsgSeqNum(newSequence); final ResendRange range = state.getResendRange(); if (range.isChunkedResendRequest()) { if (newSequence >= range.getCurrentEndSeqNo() state.dequeueMessagesUpTo(newSequence); } else if (newSequence < getExpectedTargetNum()) {
private boolean nextQueued(int num) throws FieldNotFound, RejectLogon, IncorrectDataFormat, IncorrectTagValue, UnsupportedMessageType, IOException, InvalidMessage { final Message msg = state.dequeue(num); if (msg != null) { getLog().onEvent("Processing queued message: " + num); final String msgType = msg.getHeader().getString(MsgType.FIELD); if (MsgType.LOGON.equals(msgType) || MsgType.RESEND_REQUEST.equals(msgType)) { // Logon and ResendRequest processing has already been done, so we just need to increment the target seqnum. state.incrNextTargetMsgSeqNum(); } else { nextQueued(msg, msgType); } return true; } return false; }
public Date getStartTime() throws IOException { return state.getCreationTime(); }
state = new SessionState(this, engineLog, heartbeatInterval, heartbeatInterval != 0, messageStore, testRequestDelayMultiplier);