121class ROBOTRACONTEUR_CORE_API Transport :
public IPeriodicCleanupTask, boost::noncopyable
124 friend class RobotRaconteurNode;
125 friend class ITransport;
126 RR_OVIRTUAL ~Transport() RR_OVERRIDE {}
129 RR_WEAK_PTR<RobotRaconteurNode> node;
132 Transport(
const RR_SHARED_PTR<RobotRaconteurNode>& node);
134 static boost::thread_specific_ptr<std::string> m_CurrentThreadTransportConnectionURL;
136 static std::string GetCurrentTransportConnectionURL();
138 static boost::thread_specific_ptr<RR_SHARED_PTR<ITransportConnection> > m_CurrentThreadTransport;
140 static RR_SHARED_PTR<ITransportConnection> GetCurrentThreadTransport();
142 uint32_t TransportID;
144 virtual void CheckConnection(uint32_t endpoint) = 0;
146 virtual bool IsClient()
const = 0;
148 virtual bool IsServer()
const = 0;
150 virtual std::string GetUrlSchemeString()
const = 0;
152 virtual std::vector<std::string> GetServerListenUrls() = 0;
154 virtual bool CanConnectService(boost::string_ref url) = 0;
156 virtual RR_SHARED_PTR<ITransportConnection> CreateTransportConnection(boost::string_ref url,
157 const RR_SHARED_PTR<Endpoint>& e) = 0;
159 virtual void AsyncCreateTransportConnection(
160 boost::string_ref url,
const RR_SHARED_PTR<Endpoint>& e,
161 boost::function<
void(
const RR_SHARED_PTR<ITransportConnection>&,
162 const RR_SHARED_PTR<RobotRaconteurException>&)>& handler) = 0;
164 virtual void CloseTransportConnection(
const RR_SHARED_PTR<Endpoint>& e) = 0;
166 virtual void SendMessage(
const RR_INTRUSIVE_PTR<Message>& m) = 0;
168 virtual void AsyncSendMessage(
169 const RR_INTRUSIVE_PTR<Message>& m,
170 const boost::function<
void(
const RR_SHARED_PTR<RobotRaconteurException>&)>& handler) = 0;
172 virtual void MessageReceived(
const RR_INTRUSIVE_PTR<Message>& m) = 0;
174 virtual RR_INTRUSIVE_PTR<Message> SpecialRequest(
const RR_INTRUSIVE_PTR<Message>& m,
175 const RR_SHARED_PTR<ITransportConnection>& tc);
177 virtual void Close();
179 RR_OVIRTUAL
void PeriodicCleanupTask() RR_OVERRIDE;
181 virtual uint32_t TransportCapability(boost::string_ref name);
183 boost::signals2::signal<void(
const RR_SHARED_PTR<Transport>& transport, TransportListenerEventType ev,
184 const RR_SHARED_PTR<void>& parameter)>
187 virtual RR_SHARED_PTR<RobotRaconteurNode> GetNode()
const;
189 virtual std::vector<NodeDiscoveryInfo> GetDetectedNodes(
const std::vector<std::string>& schemes);
191 virtual void AsyncGetDetectedNodes(
192 const std::vector<std::string>& schemes,
193 const boost::function<
void(
const RR_SHARED_PTR<std::vector<NodeDiscoveryInfo> >&)>& handler,
197 virtual void LocalNodeServicesChanged();
199 void FireTransportEventListener(
const RR_SHARED_PTR<Transport>& shared_this, TransportListenerEventType ev,
200 const RR_SHARED_PTR<void>& parameter);
202 void TransportConnectionClosed(uint32_t endpoint);