All Downloads are FREE. Search and download functionalities are using the official Maven repository.

quickfix.mina.initiator.InitiatorIoHandler Maven / Gradle / Ivy

There is a newer version: 2.3.1
Show newest version
/*******************************************************************************
 * Copyright (c) quickfixengine.org  All rights reserved.
 *
 * This file is part of the QuickFIX FIX Engine
 *
 * This file may be distributed under the terms of the quickfixengine.org
 * license as defined by quickfixengine.org and appearing in the file
 * LICENSE included in the packaging of this file.
 *
 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING
 * THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A
 * PARTICULAR PURPOSE.
 *
 * See http://www.quickfixengine.org/LICENSE for licensing information.
 *
 * Contact [email protected] if any conditions of this licensing
 * are not clear to you.
 ******************************************************************************/

package quickfix.mina.initiator;

import org.apache.mina.core.session.IoSession;

import quickfix.Message;
import quickfix.MessageUtils;
import quickfix.Session;
import quickfix.SessionID;
import quickfix.field.ApplVerID;
import quickfix.field.DefaultApplVerID;
import quickfix.field.MsgType;
import quickfix.mina.AbstractIoHandler;
import quickfix.mina.EventHandlingStrategy;
import quickfix.mina.IoSessionResponder;
import quickfix.mina.NetworkingOptions;
import quickfix.mina.SessionConnector;

import java.util.Optional;

class InitiatorIoHandler extends AbstractIoHandler {
    private final Session quickfixSession;
    private final EventHandlingStrategy eventHandlingStrategy;

    public InitiatorIoHandler(Session quickfixSession, NetworkingOptions networkingOptions,
            EventHandlingStrategy eventHandlingStrategy) {
        super(networkingOptions, eventHandlingStrategy);
        this.quickfixSession = quickfixSession;
        this.eventHandlingStrategy = eventHandlingStrategy;
    }

    @Override
    public void sessionCreated(IoSession session) throws Exception {
        super.sessionCreated(session);
        session.setAttribute(SessionConnector.QF_SESSION, quickfixSession);
        NetworkingOptions networkingOptions = getNetworkingOptions();
        quickfixSession.setResponder(new IoSessionResponder(session,
                networkingOptions.getSynchronousWrites(),
                networkingOptions.getSynchronousWriteTimeout(),
                quickfixSession.getMaxScheduledWriteRequests()));
        quickfixSession.getLog().onEvent("MINA session created: local="
                + session.getLocalAddress() + ", " + session.getClass() + ", remote="
                + session.getRemoteAddress());
    }

    @Override
    protected void processMessage(IoSession protocolSession, Message message) throws Exception {
        final Optional msgTypeField = message.getHeader().getOptionalString(MsgType.FIELD);
        if (msgTypeField.isPresent() && msgTypeField.get().equals(MsgType.LOGON)) {
            final SessionID sessionID = MessageUtils.getReverseSessionID(message);
            if (sessionID.isFIXT()) {
                if (message.isSetField(DefaultApplVerID.FIELD)) {
                    final ApplVerID applVerID = new ApplVerID(message.getString(DefaultApplVerID.FIELD));
                    quickfixSession.setTargetDefaultApplicationVersionID(applVerID);
                    quickfixSession.getLog().onEvent("Setting DefaultApplVerID (" + DefaultApplVerID.FIELD + "="
                            + applVerID.getValue() + ") from Logon");
                }
            }
        }
        eventHandlingStrategy.onMessage(quickfixSession, message);
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy