/*******************************************************************************
* 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 ask@quickfixengine.org if any conditions of this licensing
* are not clear to you.
******************************************************************************/
package quickfix;
import com.github.lburgazzoli.quickfixj.core.IFIXContext;
/**
* This is the primary QuickFIX/J interface for processing session messages.
*/
public interface Application {
/**
* This method is called when quickfix creates a new session. A session
* comes into and remains in existence for the life of the application.
* Sessions exist whether or not a counter party is connected to it. As soon
* as a session is created, you can begin sending messages to it. If no one
* is logged on, the messages will be sent at the time a connection is
* established with the counterparty.
*/
void onCreate(IFIXContext context,SessionID sessionId);
/**
* This callback notifies you when a valid logon has been established with a
* counter party. This is called when a connection has been established and
* the FIX logon process has completed with both parties exchanging valid
* logon messages.
*
* @param sessionId
* QuickFIX session ID
*/
void onLogon(IFIXContext context,SessionID sessionId);
/**
* This callback notifies you when an FIX session is no longer online. This
* could happen during a normal logout exchange or because of a forced
* termination or a loss of network connection.
*
* @param sessionId
* QuickFIX session ID
*/
void onLogout(IFIXContext context,SessionID sessionId);
/**
* This callback provides you with a peek at the administrative messages
* that are being sent from your FIX engine to the counter party. This is
* normally not useful for an application however it is provided for any
* logging you may wish to do. You may add fields in an adminstrative
* message before it is sent.
*
* @param message
* QuickFIX message
* @param sessionId
* QuickFIX session ID
*/
void toAdmin(IFIXContext context,Message message, SessionID sessionId);
/**
* This callback notifies you when an administrative message is sent from a
* counterparty to your FIX engine. This can be usefull for doing extra
* validation on logon messages such as for checking passwords. Throwing a
* RejectLogon exception will disconnect the counterparty.
*
* @param message
* QuickFIX message
* @param sessionId
* QuickFIX session ID
* @throws FieldNotFound
* @throws IncorrectDataFormat
* @throws IncorrectTagValue
* @throws RejectLogon
* causes a logon reject
*/
void fromAdmin(IFIXContext context,Message message, SessionID sessionId) throws FieldNotFound, IncorrectDataFormat,
IncorrectTagValue, RejectLogon;
/**
* This is a callback for application messages that you are sending to a
* counterparty. If you throw a DoNotSend exception in this function, the
* application will not send the message. This is mostly useful if the
* application has been asked to resend a message such as an order that is
* no longer relevant for the current market. Messages that are being resent
* are marked with the PossDupFlag in the header set to true; If a DoNotSend
* exception is thrown and the flag is set to true, a sequence reset will be
* sent in place of the message. If it is set to false, the message will
* simply not be sent. You may add fields before an application message
* before it is sent out.
*
* @param message
* QuickFIX message
* @param sessionId
* QuickFIX session ID
* @throws DoNotSend --
* This exception aborts message transmission
*/
void toApp(IFIXContext context,Message message, SessionID sessionId) throws DoNotSend;
/**
* This callback receives messages for the application. This is one of the
* core entry points for your FIX application. Every application level
* request will come through here. If, for example, your application is a
* sell-side OMS, this is where you will get your new order requests. If you
* were a buy side, you would get your execution reports here. If a
* FieldNotFound exception is thrown, the counterparty will receive a reject
* indicating a conditionally required field is missing. The Message class
* will throw this exception when trying to retrieve a missing field, so you
* will rarely need the throw this explicitly. You can also throw an
* UnsupportedMessageType exception. This will result in the counterparty
* getting a business reject informing them your application cannot process
* those types of messages. An IncorrectTagValue can also be thrown if a
* field contains a value that is out of range or you do not support.
*
* @param message
* QuickFIX message
* @param sessionId
* QuickFIX session ID
* @throws FieldNotFound
* @throws IncorrectDataFormat
* @throws IncorrectTagValue
* @throws UnsupportedMessageType
*/
void fromApp(IFIXContext context,Message message, SessionID sessionId) throws FieldNotFound, IncorrectDataFormat,
IncorrectTagValue, UnsupportedMessageType;
}