Пример #1
0
THREAD_PROC ThreadedSocketAcceptor::socketConnectionThread( void* p )
{
  ConnectionThreadInfo * info = reinterpret_cast < ConnectionThreadInfo* > ( p );

  ThreadedSocketAcceptor* pAcceptor = info->m_pAcceptor;
  ThreadedSocketConnection* pConnection = info->m_pConnection;
  delete info;

  int socket = pConnection->getSocket();

  while ( pConnection->read() ) {}
  delete pConnection;
  if( !pAcceptor->isStopped() )
    pAcceptor->removeThread( socket );
  return 0;
}
THREAD_PROC ThreadedSocketInitiator::socketThread( void* p )
{
    ThreadPair * pair = reinterpret_cast < ThreadPair* > ( p );

    ThreadedSocketInitiator* pInitiator = pair->first;
    ThreadedSocketConnection* pConnection = pair->second;
    FIX::SessionID sessionID = pConnection->getSession()->getSessionID();
    FIX::Session* pSession = FIX::Session::lookupSession( sessionID );
    int socket = pConnection->getSocket();
    delete pair;

    pInitiator->lock();

    if( !pConnection->connect() )
    {
        pInitiator->getLog()->onEvent( "Connection failed" );
        pConnection->disconnect();
        delete pConnection;
        pInitiator->removeThread( socket );
        pInitiator->setDisconnected( sessionID );
        return 0;
    }

    pInitiator->setConnected( sessionID );
    pInitiator->getLog()->onEvent( "Connection succeeded" );

    pSession->next();

    while ( pConnection->read() ) {}

    delete pConnection;
    if( !pInitiator->isStopped() )
        pInitiator->removeThread( socket );

    pInitiator->setDisconnected( sessionID );
    return 0;
}