ログイン時の toAdmin メッセージにパスワード(554)を追加して送信します
パスワードは設定ファイルから取得
クライアントソースファイル
tradeclient.cpp
#include"config.h"#include"quickfix/FileStore.h"#include"quickfix/SocketInitiator.h"#include"quickfix/SessionSettings.h"#include"quickfix/Log.h"#include"Application.h"#include<string>#include<iostream>#include<fstream>#include"../../src/getopt-repl.h"intmain(intargc,char**argv){if(argc!=2){std::cout<<"usage: "<<argv[0]<<" FILE."<<std::endl;return0;}std::stringfile=argv[1];try{FIX::SessionSettingssettings(file);★Applicationapplication(settings);FIX::FileStoreFactorystoreFactory(settings);FIX::ScreenLogFactorylogFactory(settings);FIX::SocketInitiatorinitiator(application,storeFactory,settings,logFactory);initiator.start();application.run();initiator.stop();return0;}catch(std::exception&e){std::cout<<e.what();return1;}}
Application application の引数に読み込んだ設定情報(settings)を追加
他、余分なところはバッサリ削除
Applicationヘッダーファイル
Application.h
#ifndef TRADECLIENT_APPLICATION_H#define TRADECLIENT_APPLICATION_H#include"quickfix/Application.h"#include"quickfix/MessageCracker.h"#include"quickfix/Values.h"#include"quickfix/Mutex.h"#include<queue>classApplication:publicFIX::Application,publicFIX::MessageCracker{public:★Application(constFIX::SessionSettings&settings)★:m_settings(settings){}voidrun();private:★FIX::SessionSettingsm_settings;voidonCreate(constFIX::SessionID&){}voidonLogon(constFIX::SessionID&sessionID);voidonLogout(constFIX::SessionID&sessionID);★voidtoAdmin(FIX::Message&,constFIX::SessionID&);voidtoApp(FIX::Message&,constFIX::SessionID&)throw(FIX::DoNotSend);voidfromAdmin(constFIX::Message&,constFIX::SessionID&)throw(FIX::FieldNotFound,FIX::IncorrectDataFormat,FIX::IncorrectTagValue,FIX::RejectLogon){}voidfromApp(constFIX::Message&message,constFIX::SessionID&sessionID)throw(FIX::FieldNotFound,FIX::IncorrectDataFormat,FIX::IncorrectTagValue,FIX::UnsupportedMessageType);};#endif
設定情報を受け取れるように変更
あとはパスワードを送信するための toAdminの実体書くために {} を削除しました
んで、不要部分はバッサリ削除
Applicationソースファイル
Application.cpp
#include"config.h"#include"Application.h"#include"quickfix/Session.h"#include<iostream>voidApplication::onLogon(constFIX::SessionID&sessionID){std::cout<<std::endl<<"Logon - "<<sessionID<<std::endl;}voidApplication::onLogout(constFIX::SessionID&sessionID){std::cout<<std::endl<<"Logout - "<<sessionID<<std::endl;}voidApplication::fromApp(constFIX::Message&message,constFIX::SessionID&sessionID)throw(FIX::FieldNotFound,FIX::IncorrectDataFormat,FIX::IncorrectTagValue,FIX::UnsupportedMessageType){crack(message,sessionID);std::cout<<std::endl<<"IN: "<<message<<std::endl;}★voidApplication::toAdmin(FIX::Message&message,constFIX::SessionID&sessionID)★{★if(FIX::MsgType_Logon==message.getHeader().getField(FIX::FIELD::MsgType))★{★constFIX::Dictionary&dic=m_settings.get(sessionID);★if(dic.has("Password"))★message.getHeader().setField(FIX::Password(dic.getString("Password")));★}★}voidApplication::toApp(FIX::Message&message,constFIX::SessionID&sessionID)throw(FIX::DoNotSend){try{FIX::PossDupFlagpossDupFlag;message.getHeader().getField(possDupFlag);if(possDupFlag)throwFIX::DoNotSend();}catch(FIX::FieldNotFound&){}std::cout<<std::endl<<"OUT: "<<message<<std::endl;}voidApplication::run(){while(true){try{★std::stringaction;★std::cout<<std::endl★<<"quit) Quit"<<std::endl★<<"Action: ";★std::cin>>action;★★if(action=="quit")★break;}catch(std::exception&e){std::cout<<"Message Not Sent: "<<e.what();}}}
toAdmin の実体を追記
パスワードは設定ファイルから取り出して送信メッセージに含めるようにしてます
ついでに不要部分をバッサリ削除して、削除した影響で run の中身も変えてます
コンパイル
tradeclient]$ make clean
tradeclient]$ make
エラーが出ないこと
正常にコンパイルできること
設定ファイルにユーザとパスワードを設定
レート情報取得用のユーザと、発注やら口座情報取得やらの取引用のユーザをそれぞれ追加しときます
tradeclient.cfg
[DEFAULT]ConnectionType=initiator
ReconnectInterval=60FileStorePath=store
FileLogPath=log
StartTime=00:00:00
EndTime=00:00:00
UseDataDictionary=Y
DataDictionary=FIX44.xml
HttpAcceptPort=9911ValidateUserDefinedFields=N
ResetOnLogout=Y
ResetOnLogon=Y
[SESSION]BeginString=FIX.4.4
SenderCompID=CAXDemo_Account_Trd
TargetCompID=CNX
SocketConnectHost=127.0.0.1
SocketConnectPort=9999HeartBtInt=30Password=Pass1234
SessionType=Trade
[SESSION]BeginString=FIX.4.4
SenderCompID=CAXDemo_Account_Str
TargetCompID=CNX
SocketConnectHost=127.0.0.1
SocketConnectPort=9999HeartBtInt=30Password=Pass1234
SessionType=Ratefeed
vimの着色
余談ですがvimで開発するときの着色設定
使える設定ファイルの確認
$ ls /usr/share/vim/vim74/colors/
README.txt darkblue.vim delek.vim elflord.vim koehler.vim murphy.vim peachpuff.vim shine.vim torte.vim
blue.vim default.vim desert.vim evening.vim morning.vim pablo.vim ron.vim slate.vim zellner.vim
環境によって違うと思います
これを利用する設定
~/.vimrc
:colorscheme delek