1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /* -*- C++ -*- */
- /****************************************************************************
- ** Copyright (c) 2001-2014
- **
- ** This file is part of the QuickFIX FIX Engine
- **
- ** This file may be distributed under the terms of the quickfixengine.org
- ** license as defined by quickfixengine.org and appearing in the file
- ** LICENSE included in the packaging of this file.
- **
- ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
- ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- **
- ** See http://www.quickfixengine.org/LICENSE for licensing information.
- **
- ** Contact ask@quickfixengine.org if any conditions of this licensing are
- ** not clear to you.
- **
- ****************************************************************************/
- #ifndef FIX_THREADEDSOCKETACCEPTOR_H
- #define FIX_THREADEDSOCKETACCEPTOR_H
- #ifdef _MSC_VER
- #pragma warning( disable : 4503 4355 4786 4290 )
- #endif
- #include "Acceptor.h"
- #include "ThreadedSocketConnection.h"
- #include "Mutex.h"
- namespace FIX
- {
- /// Threaded Socket implementation of Acceptor.
- class ThreadedSocketAcceptor : public Acceptor
- {
- friend class SocketConnection;
- public:
- ThreadedSocketAcceptor( Application&, MessageStoreFactory&,
- const SessionSettings& ) throw( ConfigError );
- ThreadedSocketAcceptor( Application&, MessageStoreFactory&,
- const SessionSettings&,
- LogFactory& ) throw( ConfigError );
- virtual ~ThreadedSocketAcceptor();
- private:
- struct AcceptorThreadInfo
- {
- AcceptorThreadInfo( ThreadedSocketAcceptor* pAcceptor, int socket, int port )
- : m_pAcceptor( pAcceptor ), m_socket( socket ), m_port( port ) {}
- ThreadedSocketAcceptor* m_pAcceptor;
- int m_socket;
- int m_port;
- };
- struct ConnectionThreadInfo
- {
- ConnectionThreadInfo( ThreadedSocketAcceptor* pAcceptor,
- ThreadedSocketConnection* pConnection )
- : m_pAcceptor( pAcceptor ), m_pConnection( pConnection ) {}
- ThreadedSocketAcceptor* m_pAcceptor;
- ThreadedSocketConnection* m_pConnection;
- };
- bool readSettings( const SessionSettings& );
- typedef std::set < int > Sockets;
- typedef std::set < SessionID > Sessions;
- typedef std::map < int, Sessions > PortToSessions;
- typedef std::map < int, int > SocketToPort;
- typedef std::map < int, thread_id > SocketToThread;
- void onConfigure( const SessionSettings& ) throw ( ConfigError );
- void onInitialize( const SessionSettings& ) throw ( RuntimeError );
- void onStart();
- bool onPoll( double timeout );
- void onStop();
- void addThread( int s, thread_id t );
- void removeThread( int s );
- static THREAD_PROC socketAcceptorThread( void* p );
- static THREAD_PROC socketConnectionThread( void* p );
- Sockets m_sockets;
- PortToSessions m_portToSessions;
- SocketToPort m_socketToPort;
- SocketToThread m_threads;
- Mutex m_mutex;
- };
- /*! @} */
- }
- #endif //FIX_THREADEDSOCKETACCEPTOR_H
|