Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

【QuickFIX】02 ログイン時にPassword(554)を送信

$
0
0

ログイン時の 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

Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>