MulticastTransport.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #ifndef DCPS_MULTICASTTRANSPORT_H
00009 #define DCPS_MULTICASTTRANSPORT_H
00010
00011 #include "Multicast_Export.h"
00012
00013 #include "MulticastDataLink_rch.h"
00014 #include "MulticastTypes.h"
00015
00016 #include "dds/DCPS/transport/framework/TransportImpl.h"
00017 #include "dds/DCPS/PoolAllocator.h"
00018
00019 OPENDDS_BEGIN_VERSIONED_NAMESPACE_DECL
00020
00021 namespace OpenDDS {
00022 namespace DCPS {
00023
00024 class MulticastInst;
00025
00026 class MulticastSession;
00027 typedef RcHandle<MulticastSession> MulticastSession_rch;
00028
00029 class OpenDDS_Multicast_Export MulticastTransport : public TransportImpl {
00030 public:
00031 explicit MulticastTransport(MulticastInst& inst);
00032 ~MulticastTransport();
00033
00034 void passive_connection(MulticastPeer local_peer, MulticastPeer remote_peer);
00035
00036 MulticastInst& config() const;
00037
00038 protected:
00039 virtual AcceptConnectResult connect_datalink(const RemoteTransport& remote,
00040 const ConnectionAttribs& attribs,
00041 const TransportClient_rch& client);
00042
00043 virtual AcceptConnectResult accept_datalink(const RemoteTransport& remote,
00044 const ConnectionAttribs& attribs,
00045 const TransportClient_rch& client);
00046
00047 virtual void stop_accepting_or_connecting(const TransportClient_wrch& client,
00048 const RepoId& remote_id);
00049
00050 bool configure_i(MulticastInst& config);
00051
00052 virtual void shutdown_i();
00053
00054 virtual bool connection_info_i(TransportLocator& info) const;
00055
00056 virtual void release_datalink(DataLink* link);
00057
00058 virtual std::string transport_type() const { return "multicast"; }
00059
00060 private:
00061
00062 typedef ACE_SYNCH_MUTEX LockType;
00063 typedef ACE_Guard<LockType> GuardType;
00064
00065 typedef ACE_Thread_Mutex ThreadLockType;
00066 typedef ACE_Guard<ThreadLockType> GuardThreadType;
00067
00068 MulticastDataLink_rch make_datalink(const RepoId& local_id,
00069 Priority priority,
00070 bool active);
00071
00072 MulticastSession_rch start_session(const MulticastDataLink_rch& link,
00073 MulticastPeer remote_peer, bool active);
00074
00075
00076
00077 ThreadLockType links_lock_;
00078
00079 typedef OPENDDS_MAP(MulticastPeer, MulticastDataLink_rch) Links;
00080 Links client_links_;
00081
00082 Links server_links_;
00083
00084
00085
00086
00087
00088
00089
00090 ThreadLockType connections_lock_;
00091 typedef std::vector<DataLink::OnStartCallback> Callbacks;
00092 typedef std::pair<MulticastPeer, MulticastPeer> Peers;
00093 typedef OPENDDS_MAP(Peers, Callbacks) PendConnMap;
00094 PendConnMap pending_connections_;
00095
00096 OPENDDS_SET(Peers) connections_;
00097 };
00098
00099 }
00100 }
00101
00102 OPENDDS_END_VERSIONED_NAMESPACE_DECL
00103
00104 #endif