Public Member Functions | Protected Member Functions | Protected Attributes | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
FIX::Initiator Class Referenceabstract

Base for classes which act as an initiator for establishing connections. More...

#include <Initiator.h>

Inheritance diagram for FIX::Initiator:
Inheritance graph
[legend]
Collaboration diagram for FIX::Initiator:
Collaboration graph
[legend]

Public Member Functions

 Initiator (Application &, MessageStoreFactory &, const SessionSettings &) throw ( ConfigError )
 
 Initiator (Application &, MessageStoreFactory &, const SessionSettings &, LogFactory &) throw ( ConfigError )
 
virtual ~Initiator ()
 
void start () throw ( ConfigError, RuntimeError )
 Start initiator.
 
void block () throw ( ConfigError, RuntimeError )
 Block on the initiator.
 
bool poll (double timeout=0.0) throw ( ConfigError, RuntimeError )
 Poll the initiator.
 
void stop (bool force=false)
 Stop initiator.
 
bool isLoggedOn ()
 Check to see if any sessions are currently logged on.
 
SessiongetSession (const SessionID &sessionID, Responder &)
 
const std::set< SessionID > & getSessions () const
 
SessiongetSession (const SessionID &sessionID) const
 
const Dictionary *const getSessionSettings (const SessionID &sessionID) const
 
bool has (const SessionID &id)
 
bool isStopped ()
 
ApplicationgetApplication ()
 
MessageStoreFactorygetMessageStoreFactory ()
 
LoggetLog ()
 

Protected Member Functions

void setPending (const SessionID &)
 
void setConnected (const SessionID &)
 
void setDisconnected (const SessionID &)
 
bool isPending (const SessionID &)
 
bool isConnected (const SessionID &)
 
bool isDisconnected (const SessionID &)
 
void connect ()
 

Protected Attributes

SessionSettings m_settings
 

Private Types

typedef std::set< SessionIDSessionIDs
 
typedef std::map< SessionID, int > SessionState
 
typedef std::map< SessionID, Session * > Sessions
 

Private Member Functions

void initialize () throw ( ConfigError )
 
virtual void onConfigure (const SessionSettings &) throw ( ConfigError )
 Implemented to configure acceptor.
 
virtual void onInitialize (const SessionSettings &) throw ( RuntimeError )
 Implemented to initialize initiator.
 
virtual void onStart ()=0
 Implemented to start connecting to targets.
 
virtual bool onPoll (double timeout)=0
 Implemented to connect and poll for events.
 
virtual void onStop ()=0
 Implemented to stop a running initiator.
 
virtual void doConnect (const SessionID &, const Dictionary &)=0
 Implemented to connect a session to its target.
 

Static Private Member Functions

static THREAD_PROC startThread (void *p)
 

Private Attributes

Sessions m_sessions
 
SessionIDs m_sessionIDs
 
SessionIDs m_pending
 
SessionIDs m_connected
 
SessionIDs m_disconnected
 
SessionState m_sessionState
 
thread_id m_threadid
 
Applicationm_application
 
MessageStoreFactorym_messageStoreFactory
 
LogFactorym_pLogFactory
 
Logm_pLog
 
NullLog m_nullLog
 
bool m_firstPoll
 
bool m_stop
 
Mutex m_mutex
 

Detailed Description

Base for classes which act as an initiator for establishing connections.

Most users will not need to implement one of these. The default SocketInitiator implementation will be used in most cases.

Definition at line 51 of file Initiator.h.

Member Typedef Documentation

◆ SessionIDs

typedef std::set< SessionID > FIX::Initiator::SessionIDs
private

Definition at line 124 of file Initiator.h.

◆ Sessions

typedef std::map< SessionID, Session* > FIX::Initiator::Sessions
private

Definition at line 126 of file Initiator.h.

◆ SessionState

typedef std::map< SessionID, int > FIX::Initiator::SessionState
private

Definition at line 125 of file Initiator.h.

Constructor & Destructor Documentation

◆ Initiator() [1/2]

FIX::Initiator::Initiator ( Application application,
MessageStoreFactory messageStoreFactory,
const SessionSettings settings 
)
throw (ConfigError
)

Definition at line 36 of file Initiator.cpp.

39: m_threadid( 0 ),
40 m_application( application ),
41 m_messageStoreFactory( messageStoreFactory ),
42 m_settings( settings ),
43 m_pLogFactory( 0 ),
44 m_pLog( 0 ),
45 m_firstPoll( true ),
46 m_stop( true )
47{ initialize(); }
thread_id m_threadid
Definition Initiator.h:135
void initialize()
Definition Initiator.cpp:63
LogFactory * m_pLogFactory
Definition Initiator.h:141
SessionSettings m_settings
Definition Initiator.h:139
Application & m_application
Definition Initiator.h:136
MessageStoreFactory & m_messageStoreFactory
Definition Initiator.h:137

◆ Initiator() [2/2]

FIX::Initiator::Initiator ( Application application,
MessageStoreFactory messageStoreFactory,
const SessionSettings settings,
LogFactory logFactory 
)
throw (ConfigError
)

Definition at line 49 of file Initiator.cpp.

53: m_threadid( 0 ),
54 m_application( application ),
55 m_messageStoreFactory( messageStoreFactory ),
56 m_settings( settings ),
57 m_pLogFactory( &logFactory ),
58 m_pLog( logFactory.create() ),
59 m_firstPoll( true ),
60 m_stop( true )
61{ initialize(); }

◆ ~Initiator()

FIX::Initiator::~Initiator ( )
virtual

Definition at line 88 of file Initiator.cpp.

89{
90 Sessions::iterator i;
91 for ( i = m_sessions.begin(); i != m_sessions.end(); ++i )
92 delete i->second;
93
94 if( m_pLogFactory && m_pLog )
96}
Sessions m_sessions
Definition Initiator.h:128
virtual void destroy(Log *)=0

References FIX::LogFactory::destroy(), m_pLog, m_pLogFactory, and m_sessions.

Member Function Documentation

◆ block()

void FIX::Initiator::block ( )
throw ( ConfigError,
RuntimeError
)

Block on the initiator.

Definition at line 203 of file Initiator.cpp.

204{
205 m_stop = false;
208
209 startThread(this);
210}
static THREAD_PROC startThread(void *p)
virtual void onConfigure(const SessionSettings &)
Implemented to configure acceptor.
Definition Initiator.h:110
virtual void onInitialize(const SessionSettings &)
Implemented to initialize initiator.
Definition Initiator.h:112

References m_settings, m_stop, onConfigure(), onInitialize(), and startThread().

◆ connect()

void FIX::Initiator::connect ( )
protected

Definition at line 131 of file Initiator.cpp.

132{
133 Locker l(m_mutex);
134
135 SessionIDs disconnected = m_disconnected;
136 SessionIDs::iterator i = disconnected.begin();
137 for ( ; i != disconnected.end(); ++i )
138 {
139 Session* pSession = Session::lookupSession( *i );
140 if ( pSession->isEnabled() && pSession->isSessionTime(UtcTimeStamp()) )
141 doConnect( *i, m_settings.get( *i ));
142 }
143}
std::set< SessionID > SessionIDs
Definition Initiator.h:124
virtual void doConnect(const SessionID &, const Dictionary &)=0
Implemented to connect a session to its target.
SessionIDs m_disconnected
Definition Initiator.h:132
static Session * lookupSession(const SessionID &)
Definition Session.cpp:1496
const Dictionary & get(const SessionID &) const
Get a dictionary for a session.

References doConnect(), FIX::SessionSettings::get(), FIX::Session::isEnabled(), FIX::Session::isSessionTime(), FIX::Session::lookupSession(), m_disconnected, m_mutex, and m_settings.

Referenced by FIX::SocketInitiator::onStart(), FIX::ThreadedSocketInitiator::onStart(), and FIX::SocketInitiator::onTimeout().

◆ doConnect()

virtual void FIX::Initiator::doConnect ( const SessionID ,
const Dictionary  
)
privatepure virtual

Implemented to connect a session to its target.

Implemented in FIX::SocketInitiator, and FIX::ThreadedSocketInitiator.

Referenced by connect().

◆ getApplication()

Application & FIX::Initiator::getApplication ( )
inline

Definition at line 86 of file Initiator.h.

86{ return m_application; }

References m_application.

◆ getLog()

Log * FIX::Initiator::getLog ( )
inline

Definition at line 90 of file Initiator.h.

91 {
92 if( m_pLog ) return m_pLog;
93 return &m_nullLog;
94 }
NullLog m_nullLog
Definition Initiator.h:143

References m_nullLog, and m_pLog.

Referenced by FIX::ThreadedSocketInitiator::doConnect(), and FIX::ThreadedSocketInitiator::socketThread().

◆ getMessageStoreFactory()

MessageStoreFactory & FIX::Initiator::getMessageStoreFactory ( )
inline

Definition at line 87 of file Initiator.h.

88 { return m_messageStoreFactory; }

References m_messageStoreFactory.

◆ getSession() [1/2]

Session * FIX::Initiator::getSession ( const SessionID sessionID) const

Definition at line 110 of file Initiator.cpp.

111{
112 Sessions::const_iterator i = m_sessions.find( sessionID );
113 if( i != m_sessions.end() )
114 return i->second;
115 else
116 return 0;
117}

References m_sessions.

◆ getSession() [2/2]

Session * FIX::Initiator::getSession ( const SessionID sessionID,
Responder responder 
)

Definition at line 98 of file Initiator.cpp.

100{
101 Sessions::iterator i = m_sessions.find( sessionID );
102 if ( i != m_sessions.end() )
103 {
104 i->second->setResponder( &responder );
105 return i->second;
106 }
107 return 0;
108}

References m_sessions, and FIX::Session::setResponder().

◆ getSessions()

const std::set< SessionID > & FIX::Initiator::getSessions ( ) const
inline

Definition at line 76 of file Initiator.h.

76{ return m_sessionIDs; }
SessionIDs m_sessionIDs
Definition Initiator.h:129

References m_sessionIDs.

◆ getSessionSettings()

const Dictionary *const FIX::Initiator::getSessionSettings ( const SessionID sessionID) const

Definition at line 119 of file Initiator.cpp.

120{
121 try
122 {
123 return &m_settings.get( sessionID );
124 }
125 catch( ConfigError& )
126 {
127 return 0;
128 }
129}

References FIX::SessionSettings::get(), and m_settings.

◆ has()

bool FIX::Initiator::has ( const SessionID id)
inline

Definition at line 80 of file Initiator.h.

81 { return m_sessions.find( id ) != m_sessions.end(); }

References m_sessions.

◆ initialize()

void FIX::Initiator::initialize ( )
throw (ConfigError
)
private

Definition at line 63 of file Initiator.cpp.

64{
65 std::set < SessionID > sessions = m_settings.getSessions();
66 std::set < SessionID > ::iterator i;
67
68 if ( !sessions.size() )
69 throw ConfigError( "No sessions defined" );
70
71 SessionFactory factory( m_application, m_messageStoreFactory,
73
74 for ( i = sessions.begin(); i != sessions.end(); ++i )
75 {
76 if ( m_settings.get( *i ).getString( "ConnectionType" ) == "initiator" )
77 {
78 m_sessionIDs.insert( *i );
79 m_sessions[ *i ] = factory.create( *i, m_settings.get( *i ) );
80 setDisconnected( *i );
81 }
82 }
83
84 if ( !m_sessions.size() )
85 throw ConfigError( "No sessions defined for initiator" );
86}
std::string getString(const std::string &, bool capitalize=false) const
Get a value as a string.
void setDisconnected(const SessionID &)
std::set< SessionID > getSessions() const

References FIX::SessionFactory::create(), FIX::SessionSettings::get(), FIX::SessionSettings::getSessions(), FIX::Dictionary::getString(), m_application, m_messageStoreFactory, m_pLogFactory, m_sessionIDs, m_sessions, m_settings, and setDisconnected().

◆ isConnected()

bool FIX::Initiator::isConnected ( const SessionID sessionID)
protected

Definition at line 178 of file Initiator.cpp.

179{
180 Locker l(m_mutex);
181 return m_connected.find( sessionID ) != m_connected.end();
182}
SessionIDs m_connected
Definition Initiator.h:131

References m_connected, and m_mutex.

◆ isDisconnected()

bool FIX::Initiator::isDisconnected ( const SessionID sessionID)
protected

Definition at line 184 of file Initiator.cpp.

185{
186 Locker l(m_mutex);
187 return m_disconnected.find( sessionID ) != m_disconnected.end();
188}

References m_disconnected, and m_mutex.

◆ isLoggedOn()

bool FIX::Initiator::isLoggedOn ( )

Check to see if any sessions are currently logged on.

Definition at line 275 of file Initiator.cpp.

276{
277 Locker l(m_mutex);
278
279 SessionIDs connected = m_connected;
280 SessionIDs::iterator i = connected.begin();
281 for ( ; i != connected.end(); ++i )
282 {
284 return true;
285 }
286 return false;
287}
bool isLoggedOn()
Definition Session.h:65

References FIX::Session::isLoggedOn(), FIX::Session::lookupSession(), m_connected, and m_mutex.

Referenced by FIX::SocketInitiator::onPoll(), FIX::SocketInitiator::onStart(), FIX::ThreadedSocketInitiator::onStop(), and stop().

◆ isPending()

bool FIX::Initiator::isPending ( const SessionID sessionID)
protected

Definition at line 172 of file Initiator.cpp.

173{
174 Locker l(m_mutex);
175 return m_pending.find( sessionID ) != m_pending.end();
176}
SessionIDs m_pending
Definition Initiator.h:130

References m_mutex, and m_pending.

◆ isStopped()

bool FIX::Initiator::isStopped ( )
inline

◆ onConfigure()

virtual void FIX::Initiator::onConfigure ( const SessionSettings )
throw (ConfigError
)
inlineprivatevirtual

Implemented to configure acceptor.

Reimplemented in FIX::SocketInitiator, and FIX::ThreadedSocketInitiator.

Definition at line 110 of file Initiator.h.

110{};

Referenced by block(), and start().

◆ onInitialize()

virtual void FIX::Initiator::onInitialize ( const SessionSettings )
throw (RuntimeError
)
inlineprivatevirtual

Implemented to initialize initiator.

Reimplemented in FIX::SocketInitiator, and FIX::ThreadedSocketInitiator.

Definition at line 112 of file Initiator.h.

112{};

Referenced by block(), and start().

◆ onPoll()

virtual bool FIX::Initiator::onPoll ( double  timeout)
privatepure virtual

Implemented to connect and poll for events.

Implemented in FIX::SocketInitiator, and FIX::ThreadedSocketInitiator.

◆ onStart()

virtual void FIX::Initiator::onStart ( )
privatepure virtual

Implemented to start connecting to targets.

Implemented in FIX::SocketInitiator, and FIX::ThreadedSocketInitiator.

Referenced by startThread().

◆ onStop()

virtual void FIX::Initiator::onStop ( )
privatepure virtual

Implemented to stop a running initiator.

Implemented in FIX::SocketInitiator, and FIX::ThreadedSocketInitiator.

Referenced by stop().

◆ poll()

bool FIX::Initiator::poll ( double  timeout = 0.0)
throw ( ConfigError,
RuntimeError
)

Poll the initiator.

Definition at line 212 of file Initiator.cpp.

213{
214 if( m_firstPoll )
215 {
216 m_stop = false;
219 connect();
220 m_firstPoll = false;
221 }
222
223 return onPoll( timeout );
224}
virtual bool onPoll(double timeout)=0
Implemented to connect and poll for events.

◆ setConnected()

void FIX::Initiator::setConnected ( const SessionID sessionID)
protected

Definition at line 154 of file Initiator.cpp.

155{
156 Locker l(m_mutex);
157
158 m_pending.erase( sessionID );
159 m_connected.insert( sessionID );
160 m_disconnected.erase( sessionID );
161}

References m_connected, m_disconnected, m_mutex, and m_pending.

Referenced by FIX::SocketInitiator::onConnect(), and FIX::ThreadedSocketInitiator::socketThread().

◆ setDisconnected()

void FIX::Initiator::setDisconnected ( const SessionID sessionID)
protected

Definition at line 163 of file Initiator.cpp.

164{
165 Locker l(m_mutex);
166
167 m_pending.erase( sessionID );
168 m_connected.erase( sessionID );
169 m_disconnected.insert( sessionID );
170}

References m_connected, m_disconnected, m_mutex, and m_pending.

Referenced by FIX::ThreadedSocketInitiator::doConnect(), initialize(), FIX::SocketInitiator::onDisconnect(), FIX::ThreadedSocketInitiator::socketThread(), and stop().

◆ setPending()

void FIX::Initiator::setPending ( const SessionID sessionID)
protected

Definition at line 145 of file Initiator.cpp.

146{
147 Locker l(m_mutex);
148
149 m_pending.insert( sessionID );
150 m_connected.erase( sessionID );
151 m_disconnected.erase( sessionID );
152}

References m_connected, m_disconnected, m_mutex, and m_pending.

Referenced by FIX::SocketInitiator::doConnect(), and FIX::ThreadedSocketInitiator::doConnect().

◆ start()

void FIX::Initiator::start ( )
throw ( ConfigError,
RuntimeError
)

Start initiator.

Definition at line 190 of file Initiator.cpp.

191{
192 m_stop = false;
195
197
198 if( !thread_spawn( &startThread, this, m_threadid ) )
199 throw RuntimeError("Unable to spawn thread");
200}
static void startGlobal(const SessionSettings &)
bool thread_spawn(THREAD_START_ROUTINE func, void *var, thread_id &thread)
Definition Utility.cpp:416

References m_settings, m_stop, m_threadid, onConfigure(), onInitialize(), FIX::HttpServer::startGlobal(), startThread(), and FIX::thread_spawn().

Referenced by FIX::SocketInitiator::onPoll(), FIX::SocketInitiator::onStart(), and FIX::ThreadedSocketInitiator::onStop().

◆ startThread()

THREAD_PROC FIX::Initiator::startThread ( void *  p)
staticprivate

Definition at line 289 of file Initiator.cpp.

290{
291 Initiator * pInitiator = static_cast < Initiator* > ( p );
292 pInitiator->onStart();
293 return 0;
294}
Initiator(Application &, MessageStoreFactory &, const SessionSettings &)
Definition Initiator.cpp:36

References onStart().

Referenced by block(), and start().

◆ stop()

void FIX::Initiator::stop ( bool  force = false)

Stop initiator.

Definition at line 226 of file Initiator.cpp.

227{
228 if( isStopped() ) return;
229
231
232 std::vector<Session*> enabledSessions;
233
234 SessionIDs connected;
235
236 {
237 Locker l(m_mutex);
238 connected = m_connected;
239 }
240
241 SessionIDs::iterator i = connected.begin();
242 for ( ; i != connected.end(); ++i )
243 {
244 Session* pSession = Session::lookupSession(*i);
245 if( pSession && pSession->isEnabled() )
246 {
247 enabledSessions.push_back( pSession );
248 pSession->logout();
249 }
250 }
251
252 if( !force )
253 {
254 for ( int second = 1; second <= 10 && isLoggedOn(); ++second )
255 process_sleep( 1 );
256 }
257
258 {
259 Locker l(m_mutex);
260 for ( i = connected.begin(); i != connected.end(); ++i )
262 }
263
264 m_stop = true;
265 onStop();
266 if( m_threadid )
268 m_threadid = 0;
269
270 std::vector<Session*>::iterator session = enabledSessions.begin();
271 for( ; session != enabledSessions.end(); ++session )
272 (*session)->logon();
273}
static void stopGlobal()
bool isLoggedOn()
Check to see if any sessions are currently logged on.
bool isStopped()
Definition Initiator.h:83
virtual void onStop()=0
Implemented to stop a running initiator.
const SessionID & getSessionID() const
Definition Session.h:75
void process_sleep(double s)
Definition Utility.cpp:466
void thread_join(thread_id thread)
Definition Utility.cpp:437

References FIX::Session::getSessionID(), FIX::Session::isEnabled(), isLoggedOn(), isStopped(), FIX::Session::logout(), FIX::Session::lookupSession(), m_connected, m_mutex, m_stop, m_threadid, onStop(), FIX::process_sleep(), setDisconnected(), FIX::HttpServer::stopGlobal(), and FIX::thread_join().

Member Data Documentation

◆ m_application

Application& FIX::Initiator::m_application
private

Definition at line 136 of file Initiator.h.

Referenced by getApplication(), and initialize().

◆ m_connected

SessionIDs FIX::Initiator::m_connected
private

Definition at line 131 of file Initiator.h.

Referenced by isConnected(), isLoggedOn(), setConnected(), setDisconnected(), setPending(), and stop().

◆ m_disconnected

SessionIDs FIX::Initiator::m_disconnected
private

Definition at line 132 of file Initiator.h.

Referenced by connect(), isDisconnected(), setConnected(), setDisconnected(), and setPending().

◆ m_firstPoll

bool FIX::Initiator::m_firstPoll
private

Definition at line 144 of file Initiator.h.

◆ m_messageStoreFactory

MessageStoreFactory& FIX::Initiator::m_messageStoreFactory
private

Definition at line 137 of file Initiator.h.

Referenced by getMessageStoreFactory(), and initialize().

◆ m_mutex

Mutex FIX::Initiator::m_mutex
private

◆ m_nullLog

NullLog FIX::Initiator::m_nullLog
private

Definition at line 143 of file Initiator.h.

Referenced by getLog().

◆ m_pending

SessionIDs FIX::Initiator::m_pending
private

Definition at line 130 of file Initiator.h.

Referenced by isPending(), setConnected(), setDisconnected(), and setPending().

◆ m_pLog

Log* FIX::Initiator::m_pLog
private

Definition at line 142 of file Initiator.h.

Referenced by getLog(), and ~Initiator().

◆ m_pLogFactory

LogFactory* FIX::Initiator::m_pLogFactory
private

Definition at line 141 of file Initiator.h.

Referenced by initialize(), and ~Initiator().

◆ m_sessionIDs

SessionIDs FIX::Initiator::m_sessionIDs
private

Definition at line 129 of file Initiator.h.

Referenced by getSessions(), and initialize().

◆ m_sessions

Sessions FIX::Initiator::m_sessions
private

Definition at line 128 of file Initiator.h.

Referenced by getSession(), getSession(), has(), initialize(), and ~Initiator().

◆ m_sessionState

SessionState FIX::Initiator::m_sessionState
private

Definition at line 133 of file Initiator.h.

◆ m_settings

SessionSettings FIX::Initiator::m_settings
protected

Definition at line 139 of file Initiator.h.

Referenced by block(), connect(), getSessionSettings(), initialize(), and start().

◆ m_stop

bool FIX::Initiator::m_stop
private

Definition at line 145 of file Initiator.h.

Referenced by block(), isStopped(), start(), and stop().

◆ m_threadid

thread_id FIX::Initiator::m_threadid
private

Definition at line 135 of file Initiator.h.

Referenced by start(), and stop().


The documentation for this class was generated from the following files:

Generated on Thu Feb 29 2024 22:38:19 for QuickFIX by doxygen 1.9.8 written by Dimitri van Heesch, © 1997-2001