Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
FIX::SocketInitiator Class Reference

Socket implementation of Initiator. More...

#include <SocketInitiator.h>

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

Public Member Functions

 SocketInitiator (Application &, MessageStoreFactory &, const SessionSettings &) throw ( ConfigError )
 
 SocketInitiator (Application &, MessageStoreFactory &, const SessionSettings &, LogFactory &) throw ( ConfigError )
 
virtual ~SocketInitiator ()
 
- Public Member Functions inherited from FIX::Initiator
 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 ()
 

Private Types

typedef std::map< int, SocketConnection * > SocketConnections
 
typedef std::map< SessionID, int > SessionToHostNum
 

Private Member Functions

void onConfigure (const SessionSettings &) throw ( ConfigError )
 Implemented to configure acceptor. More...
 
void onInitialize (const SessionSettings &) throw ( RuntimeError )
 Implemented to initialize initiator. More...
 
void onStart ()
 Implemented to start connecting to targets. More...
 
bool onPoll (double timeout)
 Implemented to connect and poll for events. More...
 
void onStop ()
 Implemented to stop a running initiator. More...
 
void doConnect (const SessionID &, const Dictionary &d)
 Implemented to connect a session to its target. More...
 
void onConnect (SocketConnector &, int)
 
void onWrite (SocketConnector &, int)
 
bool onData (SocketConnector &, int)
 
void onDisconnect (SocketConnector &, int)
 
void onError (SocketConnector &)
 
void onTimeout (SocketConnector &)
 
void getHost (const SessionID &, const Dictionary &, std::string &, short &, std::string &, short &)
 
- Private Member Functions inherited from FIX::SocketConnector::Strategy
virtual ~Strategy ()
 

Private Attributes

SessionSettings m_settings
 
SessionToHostNum m_sessionToHostNum
 
SocketConnector m_connector
 
SocketConnections m_pendingConnections
 
SocketConnections m_connections
 
time_t m_lastConnect
 
int m_reconnectInterval
 
bool m_noDelay
 
int m_sendBufSize
 
int m_rcvBufSize
 

Additional Inherited Members

- Protected Member Functions inherited from FIX::Initiator
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 inherited from FIX::Initiator
SessionSettings m_settings
 

Detailed Description

Socket implementation of Initiator.

Definition at line 53 of file SocketInitiator.h.

Member Typedef Documentation

◆ SessionToHostNum

typedef std::map< SessionID, int > FIX::SocketInitiator::SessionToHostNum
private

Definition at line 82 of file SocketInitiator.h.

◆ SocketConnections

typedef std::map< int, SocketConnection* > FIX::SocketInitiator::SocketConnections
private

Definition at line 81 of file SocketInitiator.h.

Constructor & Destructor Documentation

◆ SocketInitiator() [1/2]

FIX::SocketInitiator::SocketInitiator ( Application application,
MessageStoreFactory factory,
const SessionSettings settings 
)
throw (ConfigError
)

Definition at line 49 of file SocketInitiator.cpp.

52 {
53 }
54 
56 {
57  SocketConnections::iterator i;
58  for (i = m_connections.begin();

◆ SocketInitiator() [2/2]

FIX::SocketInitiator::SocketInitiator ( Application application,
MessageStoreFactory factory,
const SessionSettings settings,
LogFactory logFactory 
)
throw (ConfigError
)

Definition at line 60 of file SocketInitiator.cpp.

69 {
70  const Dictionary& dict = s.get();

◆ ~SocketInitiator()

FIX::SocketInitiator::~SocketInitiator ( )
virtual

Definition at line 72 of file SocketInitiator.cpp.

84 {

Member Function Documentation

◆ doConnect()

void FIX::SocketInitiator::doConnect ( const SessionID ,
const Dictionary  
)
privatevirtual

Implemented to connect a session to its target.

Implements FIX::Initiator.

Definition at line 148 of file SocketInitiator.cpp.

154  {}
155 }
156 
157 void SocketInitiator::onConnect( SocketConnector&, int s )
158 {
159  SocketConnections::iterator i = m_pendingConnections.find( s );
160  if( i == m_pendingConnections.end() ) return;
161  SocketConnection* pSocketConnection = i->second;
162 
163  m_connections[s] = pSocketConnection;
164  m_pendingConnections.erase( i );
165  setConnected( pSocketConnection->getSession()->getSessionID() );
166  pSocketConnection->onTimeout();
167 }
168 
169 void SocketInitiator::onWrite( SocketConnector& connector, int s )
170 {
171  SocketConnections::iterator i = m_connections.find( s );
172  if ( i == m_connections.end() ) return ;

◆ getHost()

void FIX::SocketInitiator::getHost ( const SessionID s,
const Dictionary d,
std::string &  address,
short &  port,
std::string &  sourceAddress,
short &  sourcePort 
)
private

Definition at line 251 of file SocketInitiator.cpp.

254  {
255  address = d.getString( hostString );
256  port = ( short ) d.getInt( portString );
257 
258  std::stringstream sourceHostStream;
259  sourceHostStream << SOCKET_CONNECT_SOURCE_HOST << num;
260  hostString = sourceHostStream.str();
261  if( d.has(hostString) )
262  sourceAddress = d.getString( hostString );
263 
264  std::stringstream sourcePortStream;
265  sourcePortStream << SOCKET_CONNECT_SOURCE_PORT << num;
266  portString = sourcePortStream.str();
267  if( d.has(portString) )
268  sourcePort = ( short ) d.getInt( portString );
269  }
270  else
271  {
272  num = 0;
273  address = d.getString( SOCKET_CONNECT_HOST );
274  port = ( short ) d.getInt( SOCKET_CONNECT_PORT );
275 
276  if( d.has(SOCKET_CONNECT_SOURCE_HOST) )
277  sourceAddress = d.getString( SOCKET_CONNECT_SOURCE_HOST );
278  if( d.has(SOCKET_CONNECT_SOURCE_PORT) )
279  sourcePort = ( short ) d.getInt( SOCKET_CONNECT_SOURCE_PORT );
280  }
281 
282  m_sessionToHostNum[ s ] = ++num;
283 }
284 }

References FIX::Dictionary::getInt(), FIX::Dictionary::getString(), FIX::Dictionary::has(), FIX::SOCKET_CONNECT_SOURCE_HOST, and FIX::SOCKET_CONNECT_SOURCE_PORT.

◆ onConfigure()

void FIX::SocketInitiator::onConfigure ( const SessionSettings )
throw (ConfigError
)
privatevirtual

Implemented to configure acceptor.

Reimplemented from FIX::Initiator.

Definition at line 84 of file SocketInitiator.cpp.

84 {
85 }
86 
88 {
89  connect();
90 
91  while ( !isStopped() ) {
92  m_connector.block( *this, false, 1.0 );
94  }
95 
96  time_t start = 0;
97  time_t now = 0;

◆ onConnect()

void FIX::SocketInitiator::onConnect ( SocketConnector ,
int  s 
)
privatevirtual

Implements FIX::SocketConnector::Strategy.

Definition at line 174 of file SocketInitiator.cpp.

179 {
180  SocketConnections::iterator i = m_connections.find( s );
181  if ( i == m_connections.end() ) return false;
182  SocketConnection* pSocketConnection = i->second;
183  return pSocketConnection->read( connector );
184 }

◆ onData()

bool FIX::SocketInitiator::onData ( SocketConnector connector,
int  s 
)
privatevirtual

Implements FIX::SocketConnector::Strategy.

Definition at line 195 of file SocketInitiator.cpp.

203  {

◆ onDisconnect()

void FIX::SocketInitiator::onDisconnect ( SocketConnector ,
int  s 
)
privatevirtual

Implements FIX::SocketConnector::Strategy.

Definition at line 203 of file SocketInitiator.cpp.

203  {
204  pSession->disconnect();
205  setDisconnected( pSession->getSessionID() );
206  }
207 
208  delete pSocketConnection;
209  m_connections.erase( s );
210  m_pendingConnections.erase( s );
211 }
212 
213 void SocketInitiator::onError( SocketConnector& connector )
214 {
215  onTimeout( connector );
216 }
217 
218 void SocketInitiator::onTimeout( SocketConnector& )
219 {
220  time_t now;
221  ::time( &now );
222 
223  if ( (now - m_lastConnect) >= m_reconnectInterval )
224  {
225  connect();
226  m_lastConnect = now;
227  }
228 

References FIX::Session::disconnect(), FIX::Session::getSessionID(), and FIX::Initiator::setDisconnected().

◆ onError()

void FIX::SocketInitiator::onError ( SocketConnector connector)
privatevirtual

Implements FIX::SocketConnector::Strategy.

Definition at line 230 of file SocketInitiator.cpp.

◆ onInitialize()

void FIX::SocketInitiator::onInitialize ( const SessionSettings )
throw (RuntimeError
)
privatevirtual

Implemented to initialize initiator.

Reimplemented from FIX::Initiator.

Definition at line 99 of file SocketInitiator.cpp.

101  {
102  m_connector.block( *this );

◆ onPoll()

bool FIX::SocketInitiator::onPoll ( double  timeout)
privatevirtual

Implemented to connect and poll for events.

Implements FIX::Initiator.

Definition at line 125 of file SocketInitiator.cpp.

128 {
129 }
130 
131 void SocketInitiator::doConnect( const SessionID& s, const Dictionary& d )
132 {
133  try
134  {
135  std::string address;
136  short port = 0;
137  std::string sourceAddress;
138  short sourcePort = 0;
139 
140  Session* session = Session::lookupSession( s );
141  if( !session->isSessionTime(UtcTimeStamp()) ) return;
142 

◆ onStart()

void FIX::SocketInitiator::onStart ( )
privatevirtual

Implemented to start connecting to targets.

Implements FIX::Initiator.

Definition at line 104 of file SocketInitiator.cpp.

109 {
110  time_t start = 0;
111  time_t now = 0;
112 
113  if( isStopped() )
114  {
115  if( start == 0 )
116  ::time( &start );
117  if( !isLoggedOn() )
118  return false;
119  if( ::time(&now) - 5 >= start )
120  return false;
121  }
122 
123  m_connector.block( *this, true, timeout );

◆ onStop()

void FIX::SocketInitiator::onStop ( )
privatevirtual

Implemented to stop a running initiator.

Implements FIX::Initiator.

Definition at line 144 of file SocketInitiator.cpp.

◆ onTimeout()

void FIX::SocketInitiator::onTimeout ( SocketConnector )
privatevirtual

Reimplemented from FIX::SocketConnector::Strategy.

Definition at line 235 of file SocketInitiator.cpp.

237 {
238  int num = 0;
239  SessionToHostNum::iterator i = m_sessionToHostNum.find( s );
240  if ( i != m_sessionToHostNum.end() ) num = i->second;
241 
242  std::stringstream hostStream;
243  hostStream << SOCKET_CONNECT_HOST << num;
244  std::string hostString = hostStream.str();
245 
246  std::stringstream portStream;
247  portStream << SOCKET_CONNECT_PORT << num;
248  std::string portString = portStream.str();
249 

References m_sessionToHostNum, FIX::SOCKET_CONNECT_HOST, and FIX::SOCKET_CONNECT_PORT.

◆ onWrite()

void FIX::SocketInitiator::onWrite ( SocketConnector connector,
int  s 
)
privatevirtual

Implements FIX::SocketConnector::Strategy.

Definition at line 186 of file SocketInitiator.cpp.

187 {
188  SocketConnections::iterator i = m_connections.find( s );
189  SocketConnections::iterator j = m_pendingConnections.find( s );
190 
191  SocketConnection* pSocketConnection = 0;
192  if( i != m_connections.end() )
193  pSocketConnection = i->second;

References m_connections, and m_pendingConnections.

Member Data Documentation

◆ m_connections

SocketConnections FIX::SocketInitiator::m_connections
private

Definition at line 105 of file SocketInitiator.h.

Referenced by onWrite().

◆ m_connector

SocketConnector FIX::SocketInitiator::m_connector
private

Definition at line 103 of file SocketInitiator.h.

◆ m_lastConnect

time_t FIX::SocketInitiator::m_lastConnect
private

Definition at line 106 of file SocketInitiator.h.

◆ m_noDelay

bool FIX::SocketInitiator::m_noDelay
private

Definition at line 108 of file SocketInitiator.h.

◆ m_pendingConnections

SocketConnections FIX::SocketInitiator::m_pendingConnections
private

Definition at line 104 of file SocketInitiator.h.

Referenced by onWrite().

◆ m_rcvBufSize

int FIX::SocketInitiator::m_rcvBufSize
private

Definition at line 110 of file SocketInitiator.h.

◆ m_reconnectInterval

int FIX::SocketInitiator::m_reconnectInterval
private

Definition at line 107 of file SocketInitiator.h.

◆ m_sendBufSize

int FIX::SocketInitiator::m_sendBufSize
private

Definition at line 109 of file SocketInitiator.h.

◆ m_sessionToHostNum

SessionToHostNum FIX::SocketInitiator::m_sessionToHostNum
private

Definition at line 102 of file SocketInitiator.h.

Referenced by onTimeout().

◆ m_settings

SessionSettings FIX::SocketInitiator::m_settings
private

Definition at line 101 of file SocketInitiator.h.


The documentation for this class was generated from the following files:
FIX::SocketInitiator::onError
void onError(SocketConnector &)
Definition: SocketInitiator.cpp:230
FIX::Initiator::start
void start()
Start initiator.
Definition: Initiator.cpp:207
FIX::SocketInitiator::onConnect
void onConnect(SocketConnector &, int)
Definition: SocketInitiator.cpp:174
FIX::SocketInitiator::m_connector
SocketConnector m_connector
Definition: SocketInitiator.h:103
FIX::Session::lookupSession
static Session * lookupSession(const SessionID &)
Definition: Session.cpp:1513
FIX::SocketInitiator::m_connections
SocketConnections m_connections
Definition: SocketInitiator.h:105
FIX::SOCKET_CONNECT_SOURCE_PORT
const char SOCKET_CONNECT_SOURCE_PORT[]
Definition: SessionSettings.h:84
FIX::Initiator::connect
void connect()
Definition: Initiator.cpp:148
FIX::SOCKET_CONNECT_SOURCE_HOST
const char SOCKET_CONNECT_SOURCE_HOST[]
Definition: SessionSettings.h:83
FIX::Initiator::isLoggedOn
bool isLoggedOn()
Check to see if any sessions are currently logged on.
Definition: Initiator.cpp:292
FIX::SocketInitiator::m_pendingConnections
SocketConnections m_pendingConnections
Definition: SocketInitiator.h:104
FIX::TYPE::UtcTimeStamp
@ UtcTimeStamp
Definition: FieldTypes.h:940
FIX::SocketInitiator::onWrite
void onWrite(SocketConnector &, int)
Definition: SocketInitiator.cpp:186
FIX::SocketInitiator::m_reconnectInterval
int m_reconnectInterval
Definition: SocketInitiator.h:107
FIX::Initiator::setDisconnected
void setDisconnected(const SessionID &)
Definition: Initiator.cpp:180
FIX::SocketInitiator::m_lastConnect
time_t m_lastConnect
Definition: SocketInitiator.h:106
FIX::SOCKET_CONNECT_PORT
const char SOCKET_CONNECT_PORT[]
Definition: SessionSettings.h:82
FIX::Initiator::setConnected
void setConnected(const SessionID &)
Definition: Initiator.cpp:171
FIX::SocketInitiator::onTimeout
void onTimeout(SocketConnector &)
Definition: SocketInitiator.cpp:235
FIX::SocketInitiator::~SocketInitiator
virtual ~SocketInitiator()
Definition: SocketInitiator.cpp:72
FIX::SocketConnector::block
void block(Strategy &strategy, bool poll=0, double timeout=0.0)
Definition: SocketConnector.cpp:131
FIX::SocketInitiator::doConnect
void doConnect(const SessionID &, const Dictionary &d)
Implemented to connect a session to its target.
Definition: SocketInitiator.cpp:148
FIX::SocketInitiator::onStart
void onStart()
Implemented to start connecting to targets.
Definition: SocketInitiator.cpp:104
FIX::SocketInitiator::m_sessionToHostNum
SessionToHostNum m_sessionToHostNum
Definition: SocketInitiator.h:102
FIX::Initiator::isStopped
bool isStopped()
Definition: Initiator.h:100
FIX::SOCKET_CONNECT_HOST
const char SOCKET_CONNECT_HOST[]
Definition: SessionSettings.h:81

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