MAK RTIspy API Documentation for HLA 1516
tcpMsgSocketMgr.h
Go to the documentation of this file.
00001 /*********************************************************************
00002 ** Copyright (c) 2010 MaK Technologies, Inc.
00003 ** All rights reserved.
00004 *********************************************************************/
00005 /*********************************************************************
00006 ** $RCSfile: $ $Revision: $ $State: Exp $
00007 *********************************************************************/
00008 
00010 
00011 #ifndef tcpMsgSocketMgr_H_
00012 #define tcpMsgSocketMgr_H_
00013 
00014 #include <set>
00015 #include <vlutil/vlInetSocketMgr.h>
00016 #include "tcpMsgSocket.h"
00017 
00018 using namespace MAKRti;
00019 
00021 typedef void (*DtTcpSocketAdditionCallback)(DtTcpMsgSocket* sock, void* usr);
00022 typedef DtTcpSocketAdditionCallback DtTcpSocketRemovalCallback;
00023 
00024 class DtTcpSocketMgrCbInfo
00025 {
00026 public:
00027 
00028    DtTcpSocketMgrCbInfo(DtTcpSocketAdditionCallback cb, void* usr)
00029    {
00030       myCb = cb;
00031       myUsr = usr;
00032    }
00033 
00034    bool operator==(const DtTcpSocketMgrCbInfo& rhs)
00035    {
00036       return (myCb == rhs.myCb && myUsr == rhs.myUsr);
00037    }
00038 
00039    DtTcpSocketAdditionCallback myCb;
00040    void* myUsr;
00041 };
00042 
00043 typedef std::map<DtInetTcpSocket*, DtTcpMsgSocket*> DtTcpMsgSocketMap;
00044 
00045 class DT_DLL_RTIUTIL DtTcpMsgSocketMgr
00046 {
00047 public:
00048 
00050    DtTcpMsgSocketMgr(DtBoost::shared_ptr<DtMsgHeaderReader> hdrReader,
00051       size_t recvBufferSize = 20000, int maxQueuedMsgs = -1);
00052 
00054    virtual ~DtTcpMsgSocketMgr();
00055 
00063    virtual bool openServerSocket( DtU16 localPort, DtInetDevice* hostIf = NULL, 
00064       DtInetUtils::DtInetAddrFamily family = DtInetUtils::DtInetAddrFamily_IPv4,
00065       DtU32 flags = (DtDefaultSockOpts | DtSockOptNonBlocking) );
00066 
00071    virtual void processConnections();
00072 
00075    virtual void addSocket(DtTcpMsgSocket* sock);
00076 
00078    static bool socketAdded(DtInetSocket* sock, void* usr);
00079    bool socketAdded(DtInetSocket* sock);
00080 
00084    virtual void addSocketAdditionCallback(DtTcpSocketAdditionCallback cb,
00085       void* usr);
00086    virtual void removeSocketAdditionCallback(DtTcpSocketAdditionCallback cb, 
00087       void* usr);
00089 
00091    static bool socketRemoved(DtInetSocket* sock, void* usr);
00092    bool socketRemoved(DtInetSocket* sock);
00093 
00097    virtual void addSocketRemovalCallback(DtTcpSocketRemovalCallback cb, 
00098       void* usr);
00099    virtual void removeSocketRemovalCallback(DtTcpSocketRemovalCallback cb, 
00100       void* usr);
00102 
00104    virtual void removeAndDelete(DtTcpMsgSocket* sock);
00105 
00107    virtual void enableBundling(size_t maxBundleSize);
00108 
00110    virtual void disableBundling();
00111 
00113    virtual void enableCompression(DtU8 compressionLevel);
00114 
00116    virtual void disableCompression();
00117 
00119    virtual void setTcpNoDelay(bool enable);
00120 
00122    virtual void setSendBufferSize(DtU32 size);
00123 
00125    virtual void setRecvBufferSize(DtU32 size);
00126 
00128    virtual DtInetSockState serverSocketState() const;
00129 
00131    virtual DtU32 maxMsgSize() const;
00132 
00134    DtTcpMsgSocketMap& socketSet();
00135 
00138    DtTcpMsgSocketMap::iterator socketIter(DtTcpMsgSocket* sock);
00139 
00141    DtString getLastError() const;
00142 
00144    bool isListening() const { return serverSocketState() == DtInetSockState_LISTENING; }
00145 
00146 private:
00147 
00148    DtTcpMsgSocketMgr(const DtTcpMsgSocketMgr&);
00149    DtTcpMsgSocketMgr& operator=(const DtTcpMsgSocketMgr&);
00150 
00151 protected:
00152 
00154    std::auto_ptr<DtInetSocketMgr> mySocketMgr;
00155 
00158    DtTcpMsgSocketMap mySockets;
00159 
00161    DtBoost::shared_ptr<DtMsgHeaderReader> myHeaderReader;
00162 
00164    int myMaxQueuedMessages;
00165 
00167    size_t myRecvBufferSize;
00168 
00170    bool myTcpNoDelay;
00171 
00173    size_t myMaxBundleSize;
00174 
00176    MAKRti::DtU8 myCompressionLevel;
00177 
00179    MAKRti::DtU32 mySockRecvBufferSize;
00180 
00182    MAKRti::DtU32 mySockSendBufferSize;
00183 
00185    std::list<DtTcpSocketMgrCbInfo> myAdditionCallbacks;
00186 
00188    std::list<DtTcpSocketMgrCbInfo> myRemovalCallbacks;
00189 
00191    DtString myLastError;
00192 };
00193 
00194 inline DtTcpMsgSocketMap& DtTcpMsgSocketMgr::socketSet()
00195 {
00196    return mySockets;
00197 }
00198 
00199 inline DtTcpMsgSocketMap::iterator DtTcpMsgSocketMgr::socketIter(DtTcpMsgSocket* sock)
00200 {
00201    DtTcpMsgSocketMap::iterator iter = mySockets.end();
00202    if(sock)
00203    {
00204       DtInetTcpSocket* inetSock = sock->inetTcpSocket();
00205       if(inetSock)
00206       {
00207          iter = mySockets.find(inetSock);
00208       }
00209    }
00210    return iter;
00211 }
00212 
00213 inline DtString DtTcpMsgSocketMgr::getLastError() const
00214 {
00215    return myLastError;
00216 }
00217 
00218 #endif //! tcpMsgSocketMgr_H_

Document ID: Generated on Thu Jun 14 14:15:04 EDT 2012 from SVN revision 116116
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)