SocketServer.h
Go to the documentation of this file.
00001 /* -*- C++ -*- */
00002 
00003 /****************************************************************************
00004 ** Copyright (c) 2001-2014
00005 **
00006 ** This file is part of the QuickFIX FIX Engine
00007 **
00008 ** This file may be distributed under the terms of the quickfixengine.org
00009 ** license as defined by quickfixengine.org and appearing in the file
00010 ** LICENSE included in the packaging of this file.
00011 **
00012 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
00013 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
00014 **
00015 ** See http://www.quickfixengine.org/LICENSE for licensing information.
00016 **
00017 ** Contact ask@quickfixengine.org if any conditions of this licensing are
00018 ** not clear to you.
00019 **
00020 ****************************************************************************/
00021 
00022 #ifndef FIX_SOCKETSERVER_H
00023 #define FIX_SOCKETSERVER_H
00024 
00025 #ifdef _MSC_VER
00026 #pragma warning( disable : 4503 4355 4786 4290 )
00027 #endif
00028 
00029 #include "SocketMonitor.h"
00030 #include "Exceptions.h"
00031 #include <map>
00032 #include <set>
00033 #include <queue>
00034 
00035 namespace FIX
00036 {
00038 struct SocketInfo
00039 {
00040   SocketInfo()
00041   : m_socket( -1 ), m_port( 0 ), m_noDelay( false ),
00042     m_sendBufSize( 0 ), m_rcvBufSize( 0 ) {}
00043   
00044   SocketInfo( int socket, short port, bool noDelay, int sendBufSize, int rcvBufSize )
00045   : m_socket( socket ), m_port( port ), m_noDelay( noDelay ), 
00046     m_sendBufSize( sendBufSize ), m_rcvBufSize( rcvBufSize ) {}
00047 
00048   int m_socket;
00049   short m_port;
00050   bool m_noDelay;
00051   int m_sendBufSize;
00052   int m_rcvBufSize;
00053 };
00054 
00056 class SocketServer
00057 {
00058 public:
00059   class Strategy;
00060 
00061   SocketServer( int timeout = 0 );
00062 
00063   int add( int port, bool reuse = false, bool noDelay = false, 
00064            int sendBufSize = 0, int rcvBufSize = 0 ) throw( SocketException& );
00065   int accept( int socket );
00066   void close();
00067   bool block( Strategy& strategy, bool poll = 0, double timeout = 0.0 );
00068 
00069   int numConnections() { return m_monitor.numSockets() - 1; }
00070   SocketMonitor& getMonitor() { return m_monitor; }
00071 
00072   int socketToPort( int socket );
00073   int portToSocket( int port );
00074 
00075 private:
00076   typedef std::map<int, SocketInfo>
00077     SocketToInfo;
00078   typedef std::map<int, SocketInfo>
00079     PortToInfo;
00080 
00081   SocketToInfo m_socketToInfo;  
00082   PortToInfo m_portToInfo;
00083   SocketMonitor m_monitor;
00084 
00085 public:
00086   class Strategy
00087   {
00088   public:
00089     virtual ~Strategy() {}
00090     virtual void onConnect( SocketServer&, int acceptSocket, int socket ) = 0;
00091     virtual void onWrite( SocketServer&, int socket ) = 0;
00092     virtual bool onData( SocketServer&, int socket ) = 0;
00093     virtual void onDisconnect( SocketServer&, int socket ) = 0;
00094     virtual void onError( SocketServer& ) = 0;
00095     virtual void onTimeout( SocketServer& ) {};
00096   };
00097 };
00098 }
00099 
00100 #endif //FIX_SOCKETSERVER_H

Generated on Mon Jun 23 2014 23:49:38 for QuickFIX by doxygen 1.7.6.1 written by Dimitri van Heesch, © 1997-2001