我需要一个简单的例子来说明如何初始化会话并发送一条FIX消息.我有这个初始代码:
SessionSettings settings = new SessionSettings( new FileInputStream("fix.cfg")); Application application = new Application(settings); MessageStoreFactory messageStoreFactory = new FileStoreFactory(settings); LogFactory logFactory = new ScreenLogFactory( true,true,true); MessageFactory messageFactory = new DefaultMessageFactory(); Initiator initiator = new SocketInitiator(application,messageStoreFactory,settings,logFactory,messageFactory); initiator.start();
解决方法
从上面的代码中,我看到你有一个启动器应用程序(客户端),你还需要创建一个acceptor应用程序(服务器).贝娄我已经附上了两个可以做你想做的课程.
首先,我将列出接受器应用程序:
public class ServerApplication implements Application { @Override public void onCreate(SessionID sessionID) { } @Override public void onlogon(SessionID sessionID) { } @Override public void onlogout(SessionID sessionID) { } @Override public void toAdmin(Message message,SessionID sessionID) { } @Override public void fromAdmin(Message message,SessionID sessionID) throws FieldNotFound,IncorrectDataFormat,IncorrectTagValue,Rejectlogon { } @Override public void toApp(Message message,SessionID sessionID) throws DoNotSend { } @Override public void fromApp(Message message,UnsupportedMessageType { System.out.println("FromApp: " + message); } public static void main(String[] args) throws ConfigError,FileNotFoundException,InterruptedException,SessionNotFound { SessionSettings settings = new SessionSettings("res/acceptor.config"); Application application = new ServerApplication(); MessageStoreFactory messageStoreFactory = new FileStoreFactory(settings); LogFactory logFactory = new ScreenLogFactory( true,true); MessageFactory messageFactory = new DefaultMessageFactory(); Acceptor initiator = new SocketAcceptor(application,messageFactory); initiator.start(); CountDownLatch latch = new CountDownLatch(1); latch.await(); }
}
这是一个服务器应用程序,它将保持启动状态并侦听来自连接到它的客户端的消息.这是它使用的配置文件(acceptor.properties):
[default] ApplicationID=server FileStorePath=storage/messages/ ConnectionType=acceptor StartTime=00:01:00 Europe/Bucharest EndTime=23:59:00 Europe/Bucharest HeartBtInt=30 UseDataDictionary=Y DataDictionary=FIX42.xml ValidateUserDefinedFields=N ValidateIncomingMessage=N RefreshOnlogon=Y [session] BeginString=FIX.4.2 SocketAcceptPort=9877 SenderCompID=server TargetCompID=client AcceptorTemplate=N lockquote
接下来是客户端应用程序代码.它尝试连接到服务器,然后它将向它发送一条消息:
public class ClientApplication implements Application { private static volatile SessionID sessionID; @Override public void onCreate(SessionID sessionID) { System.out.println("OnCreate"); } @Override public void onlogon(SessionID sessionID) { System.out.println("Onlogon"); ClientApplication.sessionID = sessionID; } @Override public void onlogout(SessionID sessionID) { System.out.println("Onlogout"); ClientApplication.sessionID = null; } @Override public void toAdmin(Message message,SessionID sessionID) { System.out.println("ToAdmin"); } @Override public void fromAdmin(Message message,Rejectlogon { System.out.println("FromAdmin"); } @Override public void toApp(Message message,SessionID sessionID) throws DoNotSend { System.out.println("ToApp: " + message); } @Override public void fromApp(Message message,UnsupportedMessageType { System.out.println("FromApp"); } public static void main(String[] args) throws ConfigError,SessionNotFound { SessionSettings settings = new SessionSettings("res/initiator.config"); Application application = new ClientApplication(); MessageStoreFactory messageStoreFactory = new FileStoreFactory(settings); LogFactory logFactory = new ScreenLogFactory( true,true); MessageFactory messageFactory = new DefaultMessageFactory(); Initiator initiator = new SocketInitiator(application,messageFactory); initiator.start(); while (sessionID == null) { Thread.sleep(1000); } final String orderId = "342"; NewOrderSingle newOrder = new NewOrderSingle(new ClOrdID(orderId),new HandlInst('1'),new Symbol("6758.T"),new Side(Side.BUY),new TransactTime(new Date()),new OrdType(OrdType.MARKET)); Session.sendToTarget(newOrder,sessionID); Thread.sleep(5000); }
}
它的配置文件(initiator.config)几乎与用于acceptor的配置文件相同:
[default] ApplicationID=client FileStorePath=storage/messages/ ConnectionType=initiator StartTime=00:01:00 Europe/Bucharest EndTime=23:59:00 Europe/Bucharest HeartBtInt=30 UseDataDictionary=Y DataDictionary=FIX42.xml ValidateUserDefinedFields=N ValidateIncomingMessage=N RefreshOnlogon=Y [session] BeginString=FIX.4.2 SocketConnectHost=localhost SocketConnectPort=9877 SenderCompID=client TargetCompID=server
配置文件都错过了一些选项,但出于测试目的就足够了.每个类都有一个主要方法,仅用于测试您想要的案例.通常你会处理它们的启动或停止方式有点不同.服务器应用程序侦听消息/连接并且永远不会停止,而客户端应用程序在发送第一条消息后立即停止.