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. More...
 
void block () throw ( ConfigError, RuntimeError )
 Block on the initiator. More...
 
bool poll (double timeout=0.0) throw ( ConfigError, RuntimeError )
 Poll the initiator. More...
 
void stop (bool force=false)
 Stop initiator. More...
 
bool isLoggedOn ()
 Check to see if any sessions are currently logged on. More...
 
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. More...
 
virtual void onInitialize (const SessionSettings &) throw ( RuntimeError )
 Implemented to initialize initiator. More...
 
virtual void onStart ()=0
 Implemented to start connecting to targets. More...
 
virtual bool onPoll (double timeout)=0
 Implemented to connect and poll for events. More...
 
virtual void onStop ()=0
 Implemented to stop a running initiator. More...
 
virtual void doConnect (const SessionID &, const Dictionary &)=0
 Implemented to connect a session to its target. More...
 

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 68 of file Initiator.h.

Member Typedef Documentation

◆ SessionIDs

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

Definition at line 141 of file Initiator.h.

◆ Sessions

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

Definition at line 143 of file Initiator.h.

◆ SessionState

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

Definition at line 142 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 53 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(); }
62 
63 void Initiator::initialize() throw ( ConfigError )
64 {

◆ Initiator() [2/2]

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

Definition at line 66 of file Initiator.cpp.

75  {
76  if ( m_settings.get( *i ).getString( "ConnectionType" ) == "initiator" )
77  {
78  m_sessionIDs.insert( *i );

◆ ~Initiator()

FIX::Initiator::~Initiator ( )
virtual

Definition at line 105 of file Initiator.cpp.

111 {
112  Sessions::const_iterator i = m_sessions.find( sessionID );
113  if( i != m_sessions.end() )

Member Function Documentation

◆ block()

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

Block on the initiator.

Definition at line 220 of file Initiator.cpp.

227 {

◆ connect()

void FIX::Initiator::connect ( )
protected

Definition at line 148 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 );

◆ doConnect()

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

Implemented to connect a session to its target.

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

Referenced by getSessionSettings().

◆ getApplication()

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

Definition at line 103 of file Initiator.h.

106 :
107  void initialize() throw ( ConfigError );

◆ getLog()

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

Definition at line 107 of file Initiator.h.

110  {};

◆ getMessageStoreFactory()

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

Definition at line 104 of file Initiator.h.

106  :
107  void initialize() throw ( ConfigError );

◆ getSession() [1/2]

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

Definition at line 127 of file Initiator.cpp.

132 {
133  Locker l(m_mutex);
134 

◆ getSession() [2/2]

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

Definition at line 115 of file Initiator.cpp.

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

◆ getSessions()

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

Definition at line 93 of file Initiator.h.

96 :
97  void setPending( const SessionID& );

◆ getSessionSettings()

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

Definition at line 136 of file Initiator.cpp.

138  {
139  Session* pSession = Session::lookupSession( *i );
140  if ( pSession->isEnabled() && pSession->isSessionTime(UtcTimeStamp()) )
141  doConnect( *i, m_settings.get( *i ));
142  }
143 }
144 
145 void Initiator::setPending( const SessionID& sessionID )
146 {

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

◆ has()

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

Definition at line 97 of file Initiator.h.

106  :
107  void initialize() throw ( ConfigError );

◆ initialize()

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

Definition at line 80 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 }
97 
98 Session* Initiator::getSession( const SessionID& sessionID,
99  Responder& responder )
100 {
101  Sessions::iterator i = m_sessions.find( sessionID );
102  if ( i != m_sessions.end() )
103  {

◆ isConnected()

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

Definition at line 195 of file Initiator.cpp.

◆ isDisconnected()

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

Definition at line 201 of file Initiator.cpp.

204 {
205  m_stop = false;

References m_settings, m_stop, and onConfigure().

◆ isLoggedOn()

bool FIX::Initiator::isLoggedOn ( )

Check to see if any sessions are currently logged on.

Definition at line 292 of file Initiator.cpp.

◆ isPending()

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

Definition at line 189 of file Initiator.cpp.

191 {
192  m_stop = false;

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

◆ isStopped()

bool FIX::Initiator::isStopped ( )
inline

Definition at line 100 of file Initiator.h.

106 :
107  void initialize() throw ( ConfigError );

◆ 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 127 of file Initiator.h.

138 :
139  SessionSettings m_settings;

Referenced by isDisconnected(), and isPending().

◆ 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 129 of file Initiator.h.

138 :
139  SessionSettings m_settings;

Referenced by isPending().

◆ 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.

◆ onStop()

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

Implemented to stop a running initiator.

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

◆ poll()

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

Poll the initiator.

Definition at line 229 of file Initiator.cpp.

236  {
237  Locker l(m_mutex);
238  connected = m_connected;
239  }
240 
241  SessionIDs::iterator i = connected.begin();

◆ setConnected()

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

Definition at line 171 of file Initiator.cpp.

173 {
174  Locker l(m_mutex);
175  return m_pending.find( sessionID ) != m_pending.end();
176 }
177 
178 bool Initiator::isConnected( const SessionID& sessionID )

References m_mutex, and m_pending.

◆ setDisconnected()

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

Definition at line 180 of file Initiator.cpp.

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

Referenced by FIX::SocketInitiator::onDisconnect().

◆ setPending()

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

Definition at line 162 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 );

References m_connected, m_disconnected, m_mutex, and m_pending.

◆ start()

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

Start initiator.

Definition at line 207 of file Initiator.cpp.

213 {
214  if( m_firstPoll )
215  {
216  m_stop = false;

Referenced by FIX::ThreadedSocketInitiator::onPoll().

◆ startThread()

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

Definition at line 306 of file Initiator.cpp.

◆ stop()

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

Stop initiator.

Definition at line 243 of file Initiator.cpp.

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 }
274 
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 }
288 
290 {

References FIX::Session::isEnabled(), FIX::Session::logout(), and FIX::Session::lookupSession().

Member Data Documentation

◆ m_application

Application& FIX::Initiator::m_application
private

Definition at line 153 of file Initiator.h.

◆ m_connected

SessionIDs FIX::Initiator::m_connected
private

Definition at line 148 of file Initiator.h.

Referenced by setPending().

◆ m_disconnected

SessionIDs FIX::Initiator::m_disconnected
private

Definition at line 149 of file Initiator.h.

Referenced by setPending().

◆ m_firstPoll

bool FIX::Initiator::m_firstPoll
private

Definition at line 161 of file Initiator.h.

◆ m_messageStoreFactory

MessageStoreFactory& FIX::Initiator::m_messageStoreFactory
private

Definition at line 154 of file Initiator.h.

◆ m_mutex

Mutex FIX::Initiator::m_mutex
private

Definition at line 163 of file Initiator.h.

Referenced by setConnected(), and setPending().

◆ m_nullLog

NullLog FIX::Initiator::m_nullLog
private

Definition at line 160 of file Initiator.h.

◆ m_pending

SessionIDs FIX::Initiator::m_pending
private

Definition at line 147 of file Initiator.h.

Referenced by setConnected(), and setPending().

◆ m_pLog

Log* FIX::Initiator::m_pLog
private

Definition at line 159 of file Initiator.h.

◆ m_pLogFactory

LogFactory* FIX::Initiator::m_pLogFactory
private

Definition at line 158 of file Initiator.h.

◆ m_sessionIDs

SessionIDs FIX::Initiator::m_sessionIDs
private

Definition at line 146 of file Initiator.h.

◆ m_sessions

Sessions FIX::Initiator::m_sessions
private

Definition at line 145 of file Initiator.h.

◆ m_sessionState

SessionState FIX::Initiator::m_sessionState
private

Definition at line 150 of file Initiator.h.

◆ m_settings

SessionSettings FIX::Initiator::m_settings
protected

Definition at line 156 of file Initiator.h.

Referenced by getSessionSettings(), isDisconnected(), and isPending().

◆ m_stop

bool FIX::Initiator::m_stop
private

Definition at line 162 of file Initiator.h.

Referenced by isDisconnected(), and isPending().

◆ m_threadid

thread_id FIX::Initiator::m_threadid
private

Definition at line 152 of file Initiator.h.


The documentation for this class was generated from the following files:
FIX::Initiator::SessionIDs
std::set< SessionID > SessionIDs
Definition: Initiator.h:141
FIX::Initiator::m_stop
bool m_stop
Definition: Initiator.h:162
FIX::Initiator::m_disconnected
SessionIDs m_disconnected
Definition: Initiator.h:149
FIX::Session::lookupSession
static Session * lookupSession(const SessionID &)
Definition: Session.cpp:1513
FIX::Initiator::m_pLogFactory
LogFactory * m_pLogFactory
Definition: Initiator.h:158
FIX::Dictionary::getString
std::string getString(const std::string &, bool capitalize=false) const
Get a value as a string.
Definition: Dictionary.cpp:49
FIX::Initiator::getSession
Session * getSession(const SessionID &sessionID, Responder &)
Definition: Initiator.cpp:115
FIX::Initiator::m_sessions
Sessions m_sessions
Definition: Initiator.h:145
FIX::Session::getSessionID
const SessionID & getSessionID() const
Definition: Session.h:109
FIX::Initiator::m_firstPoll
bool m_firstPoll
Definition: Initiator.h:161
FIX::Initiator::m_pLog
Log * m_pLog
Definition: Initiator.h:159
FIX::Initiator::isLoggedOn
bool isLoggedOn()
Check to see if any sessions are currently logged on.
Definition: Initiator.cpp:292
FIX::Initiator::onStop
virtual void onStop()=0
Implemented to stop a running initiator.
FIX::Initiator::m_mutex
Mutex m_mutex
Definition: Initiator.h:163
FIX::Initiator::m_settings
SessionSettings m_settings
Definition: Initiator.h:156
FIX::TYPE::UtcTimeStamp
@ UtcTimeStamp
Definition: FieldTypes.h:940
THREAD_PROC
#define THREAD_PROC
Definition: Utility.h:184
FIX::LogFactory::destroy
virtual void destroy(Log *)=0
FIX::Initiator::setDisconnected
void setDisconnected(const SessionID &)
Definition: Initiator.cpp:180
FIX::Initiator::m_messageStoreFactory
MessageStoreFactory & m_messageStoreFactory
Definition: Initiator.h:154
FIX::Initiator::m_sessionIDs
SessionIDs m_sessionIDs
Definition: Initiator.h:146
FIX::Session::isLoggedOn
bool isLoggedOn()
Definition: Session.h:99
FIX::Initiator::m_application
Application & m_application
Definition: Initiator.h:153
FIX::process_sleep
void process_sleep(double s)
Definition: Utility.cpp:483
FIX::Initiator::setPending
void setPending(const SessionID &)
Definition: Initiator.cpp:162
FIX::Initiator::initialize
void initialize()
Definition: Initiator.cpp:80
FIX::Initiator::m_threadid
thread_id m_threadid
Definition: Initiator.h:152
FIX::thread_join
void thread_join(thread_id thread)
Definition: Utility.cpp:454
FIX::Initiator::doConnect
virtual void doConnect(const SessionID &, const Dictionary &)=0
Implemented to connect a session to its target.
FIX::Initiator::m_pending
SessionIDs m_pending
Definition: Initiator.h:147
FIX::Initiator::startThread
static THREAD_PROC startThread(void *p)
Definition: Initiator.cpp:306
FIX::Initiator::m_connected
SessionIDs m_connected
Definition: Initiator.h:148
FIX::SessionSettings::get
const Dictionary & get(const SessionID &) const
Get a dictionary for a session.
Definition: SessionSettings.cpp:144
FIX::Initiator::onConfigure
virtual void onConfigure(const SessionSettings &)
Implemented to configure acceptor.
Definition: Initiator.h:127
FIX::Initiator::isConnected
bool isConnected(const SessionID &)
Definition: Initiator.cpp:195

Generated on Wed Apr 29 2020 19:41:30 for QuickFIX by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2001