16#ifndef __Ice_Connection_h__
17#define __Ice_Connection_h__
35#ifndef ICE_IGNORE_VERSION
36# if ICE_INT_VERSION / 100 != 307
37# error Ice version mismatch!
39# if ICE_INT_VERSION % 100 >= 50
40# error Beta header file detected
42# if ICE_INT_VERSION % 100 < 11
43# error Ice patch level mismatch!
48# if defined(ICE_STATIC_LIBS)
50# elif defined(ICE_API_EXPORTS)
51# define ICE_API ICE_DECLSPEC_EXPORT
53# define ICE_API ICE_DECLSPEC_IMPORT
57#ifdef ICE_CPP11_MAPPING
169 std::tuple<const int&, const ::Ice::ACMClose&, const ::Ice::ACMHeartbeat&> ice_tuple()
const
199using HeaderDict = ::std::map<::std::string, ::std::string>;
202using Ice::operator<=;
204using Ice::operator>=;
205using Ice::operator==;
206using Ice::operator!=;
217class ICE_CLASS(ICE_API) ConnectionInfo
223 ConnectionInfo() =
default;
225 ConnectionInfo(
const ConnectionInfo&) =
default;
226 ConnectionInfo(ConnectionInfo&&) =
default;
227 ConnectionInfo& operator=(
const ConnectionInfo&) =
default;
228 ConnectionInfo& operator=(ConnectionInfo&&) =
default;
237 ConnectionInfo(const ::std::shared_ptr<::Ice::ConnectionInfo>& underlying,
bool incoming, const ::std::string& adapterName, const ::std::string& connectionId) :
238 underlying(underlying),
240 adapterName(adapterName),
241 connectionId(connectionId)
249 ::std::shared_ptr<::Ice::ConnectionInfo> underlying;
258 ::std::string adapterName;
262 ::std::string connectionId;
271using CloseCallback = ::std::function<void(const ::std::shared_ptr<Connection>& con)>;
278using HeartbeatCallback = ::std::function<void(const ::std::shared_ptr<Connection>& con)>;
284class ICE_CLASS(ICE_API) Connection
295 virtual void close(ConnectionClose mode)
noexcept = 0;
309 virtual ::std::shared_ptr<::Ice::ObjectPrx> createProxy(
const Identity&
id)
const = 0;
327 virtual void setAdapter(const ::std::shared_ptr<ObjectAdapter>& adapter) = 0;
336 virtual ::std::shared_ptr<::Ice::ObjectAdapter> getAdapter() const noexcept = 0;
342 virtual ::std::shared_ptr<::Ice::Endpoint> getEndpoint() const noexcept = 0;
351 virtual
void flushBatchRequests(CompressBatch compress)
353 flushBatchRequestsAsync(compress).get();
366 virtual ::std::function<void()>
367 flushBatchRequestsAsync(CompressBatch compress,
368 ::std::function<
void(::std::exception_ptr)> exception,
369 ::std::function<
void(
bool)> sent =
nullptr) = 0;
379 template<
template<
typename>
class P = ::std::promise>
380 auto flushBatchRequestsAsync(CompressBatch compress)
381 ->
decltype(::std::declval<P<void>>().get_future())
383 using Promise = P<void>;
384 auto promise = ::std::make_shared<Promise>();
385 flushBatchRequestsAsync(compress,
386 [promise](::std::exception_ptr ex)
388 promise->set_exception(::std::move(ex));
392 promise->set_value();
394 return promise->get_future();
404 virtual void setCloseCallback(CloseCallback callback) = 0;
412 virtual void setHeartbeatCallback(HeartbeatCallback callback) = 0;
417 virtual void heartbeat()
419 heartbeatAsync().get();
428 virtual ::std::function<void()>
429 heartbeatAsync(::std::function<
void(::std::exception_ptr)> exception,
430 ::std::function<
void(
bool)> sent =
nullptr) = 0;
436 template<
template<
typename>
class P = ::std::promise>
437 auto heartbeatAsync()
438 ->
decltype(::std::declval<P<void>>().get_future())
440 using Promise = P<void>;
441 auto promise = ::std::make_shared<Promise>();
442 heartbeatAsync([promise](::std::exception_ptr ex)
444 promise->set_exception(::std::move(ex));
448 promise->set_value();
450 return promise->get_future();
459 virtual void setACM(
const Ice::optional<int>& timeout,
const Ice::optional<ACMClose>& close,
const Ice::optional<ACMHeartbeat>& heartbeat) = 0;
465 virtual ::Ice::ACM getACM() noexcept = 0;
472 virtual ::std::
string type() const noexcept = 0;
478 virtual
int timeout() const noexcept = 0;
486 virtual ::std::
string toString() const noexcept = 0;
492 virtual ::std::shared_ptr<::Ice::ConnectionInfo> getInfo() const = 0;
499 virtual
void setBufferSize(
int rcvSize,
int sndSize) = 0;
508 virtual
void throwException() const = 0;
529 IPConnectionInfo(
const IPConnectionInfo&) =
default;
530 IPConnectionInfo(IPConnectionInfo&&) =
default;
531 IPConnectionInfo& operator=(
const IPConnectionInfo&) =
default;
532 IPConnectionInfo& operator=(IPConnectionInfo&&) =
default;
545 IPConnectionInfo(const ::std::shared_ptr<::Ice::ConnectionInfo>& underlying,
bool incoming, const ::std::string& adapterName, const ::std::string& connectionId, const ::std::string& localAddress,
int localPort, const ::std::string& remoteAddress,
int remotePort) :
546 ConnectionInfo(underlying, incoming, adapterName, connectionId),
547 localAddress(localAddress),
548 localPort(localPort),
549 remoteAddress(remoteAddress),
550 remotePort(remotePort)
557 ::std::string localAddress;
565 ::std::string remoteAddress;
576class ICE_CLASS(ICE_API) TCPConnectionInfo :
public ::Ice::IPConnectionInfo
582 TCPConnectionInfo() :
588 TCPConnectionInfo(
const TCPConnectionInfo&) =
default;
589 TCPConnectionInfo(TCPConnectionInfo&&) =
default;
590 TCPConnectionInfo& operator=(
const TCPConnectionInfo&) =
default;
591 TCPConnectionInfo& operator=(TCPConnectionInfo&&) =
default;
606 TCPConnectionInfo(const ::std::shared_ptr<::Ice::ConnectionInfo>& underlying,
bool incoming, const ::std::string& adapterName, const ::std::string& connectionId, const ::std::string& localAddress,
int localPort, const ::std::string& remoteAddress,
int remotePort,
int rcvSize,
int sndSize) :
607 IPConnectionInfo(underlying, incoming, adapterName, connectionId, localAddress, localPort, remoteAddress, remotePort),
627class ICE_CLASS(ICE_API) UDPConnectionInfo :
public ::Ice::IPConnectionInfo
633 UDPConnectionInfo() :
640 UDPConnectionInfo(
const UDPConnectionInfo&) =
default;
641 UDPConnectionInfo(UDPConnectionInfo&&) =
default;
642 UDPConnectionInfo& operator=(
const UDPConnectionInfo&) =
default;
643 UDPConnectionInfo& operator=(UDPConnectionInfo&&) =
default;
660 UDPConnectionInfo(const ::std::shared_ptr<::Ice::ConnectionInfo>& underlying,
bool incoming, const ::std::string& adapterName, const ::std::string& connectionId, const ::std::string& localAddress,
int localPort, const ::std::string& remoteAddress,
int remotePort, const ::std::string& mcastAddress,
int mcastPort,
int rcvSize,
int sndSize) :
661 IPConnectionInfo(underlying, incoming, adapterName, connectionId, localAddress, localPort, remoteAddress, remotePort),
662 mcastAddress(mcastAddress),
663 mcastPort(mcastPort),
672 ::std::string mcastAddress;
691class ICE_CLASS(ICE_API) WSConnectionInfo :
public ::Ice::ConnectionInfo
697 WSConnectionInfo() =
default;
699 WSConnectionInfo(
const WSConnectionInfo&) =
default;
700 WSConnectionInfo(WSConnectionInfo&&) =
default;
701 WSConnectionInfo& operator=(
const WSConnectionInfo&) =
default;
702 WSConnectionInfo& operator=(WSConnectionInfo&&) =
default;
712 WSConnectionInfo(const ::std::shared_ptr<::Ice::ConnectionInfo>& underlying,
bool incoming, const ::std::string& adapterName, const ::std::string& connectionId, const ::Ice::HeaderDict& headers) :
713 ConnectionInfo(underlying, incoming, adapterName, connectionId),
911 if(
close != rhs_.close)
932 else if(rhs_.timeout <
timeout)
936 if(
close < rhs_.close)
940 else if(rhs_.close <
close)
1056#ifdef ICE_CPP11_COMPILER
1087inline bool operator<(
const ConnectionInfo& lhs,
const ConnectionInfo& rhs)
1089 return static_cast<const LocalObject&
>(lhs) <
static_cast<const LocalObject&
>(rhs);
1107#ifdef ICE_CPP11_COMPILER
1128inline bool operator<(
const CloseCallback& lhs,
const CloseCallback& rhs)
1130 return static_cast<const LocalObject&
>(lhs) <
static_cast<const LocalObject&
>(rhs);
1148#ifdef ICE_CPP11_COMPILER
1168inline bool operator<(
const HeartbeatCallback& lhs,
const HeartbeatCallback& rhs)
1170 return static_cast<const LocalObject&
>(lhs) <
static_cast<const LocalObject&
>(rhs);
1186#ifdef ICE_CPP11_COMPILER
1458#ifdef ICE_CPP11_COMPILER
1487inline bool operator<(
const IPConnectionInfo& lhs,
const IPConnectionInfo& rhs)
1489 return static_cast<const LocalObject&
>(lhs) <
static_cast<const LocalObject&
>(rhs);
1532#ifdef ICE_CPP11_COMPILER
1553inline bool operator<(
const TCPConnectionInfo& lhs,
const TCPConnectionInfo& rhs)
1555 return static_cast<const LocalObject&
>(lhs) <
static_cast<const LocalObject&
>(rhs);
1594 UDPConnectionInfo(const ::Ice::ConnectionInfoPtr&
underlying,
bool incoming, const ::std::string&
adapterName, const ::std::string&
connectionId, const ::std::string&
localAddress,
::Ice::Int localPort, const ::std::string&
remoteAddress,
::Ice::Int remotePort, const ::std::string&
mcastAddress,
::Ice::Int mcastPort,
::Ice::Int rcvSize,
::Ice::Int sndSize) :
1603#ifdef ICE_CPP11_COMPILER
1632inline bool operator<(
const UDPConnectionInfo& lhs,
const UDPConnectionInfo& rhs)
1634 return static_cast<const LocalObject&
>(lhs) <
static_cast<const LocalObject&
>(rhs);
1668#ifdef ICE_CPP11_COMPILER
1685inline bool operator<(
const WSConnectionInfo& lhs,
const WSConnectionInfo& rhs)
1687 return static_cast<const LocalObject&
>(lhs) <
static_cast<const LocalObject&
>(rhs);
#define ICE_API
Definition Config.h:197
#define ICE_NOEXCEPT
Definition Config.h:128
#define ICE_MEMBER(API)
Definition Config.h:177
#define ICE_CLASS(API)
Definition Config.h:176
Shared & operator=(const Shared &)
Definition Shared.h:94
Base class for asynchronous callback wrapper classes used for calls to IceProxy::Ice::Connection::beg...
Definition Connection.h:1009
Base class for asynchronous callback wrapper classes used for calls to IceProxy::Ice::Connection::beg...
Definition Connection.h:1017
An application can implement this interface to receive notifications when a connection closes.
Definition Connection.h:1100
virtual void closed(const ConnectionPtr &con)=0
This method is called by the connection when the connection is closed.
CloseCallbackPtr PointerType
Definition Connection.h:1103
Base class providing access to the connection details.
Definition Connection.h:1030
ConnectionInfo(const ::Ice::ConnectionInfoPtr &underlying, bool incoming, const ::std::string &adapterName, const ::std::string &connectionId)
One-shot constructor to initialize all data members.
Definition Connection.h:1048
::Ice::ConnectionInfoPtr underlying
The information of the underyling transport or null if there's no underlying transport.
Definition Connection.h:1065
ConnectionInfo()
Definition Connection.h:1037
ConnectionInfoPtr PointerType
Definition Connection.h:1033
::std::string adapterName
The name of the adapter associated with the connection.
Definition Connection.h:1074
::std::string connectionId
The connection id.
Definition Connection.h:1078
virtual ~ConnectionInfo()
bool incoming
Whether or not the connection is an incoming or outgoing connection.
Definition Connection.h:1070
The user-level interface to a connection.
Definition Connection.h:1179
virtual void setAdapter(const ObjectAdapterPtr &adapter)=0
Explicitly set an object adapter that dispatches requests that are received over this connection.
virtual void end_flushBatchRequests(const AsyncResultPtr &result)=0
Flush any pending batch requests for this connection.
virtual ObjectPrx createProxy(const Identity &id) const =0
Create a special proxy that always uses this connection.
virtual void flushBatchRequests(CompressBatch compress)=0
Flush any pending batch requests for this connection.
virtual AsyncResultPtr begin_flushBatchRequests(CompressBatch compress)=0
Flush any pending batch requests for this connection.
virtual ObjectAdapterPtr getAdapter() const =0
Get the object adapter that dispatches requests for this connection.
virtual::std::string toString() const =0
Return a description of the connection as human readable text, suitable for logging or error messages...
virtual void end_heartbeat(const AsyncResultPtr &result)=0
Send a heartbeat message.
virtual void setACM(const IceUtil::Optional< Int > &timeout, const IceUtil::Optional< ACMClose > &close, const IceUtil::Optional< ACMHeartbeat > &heartbeat)=0
Set the active connection management parameters.
virtual ConnectionInfoPtr getInfo() const =0
Returns the connection information.
virtual::std::string type() const =0
Return the connection type.
virtual void setHeartbeatCallback(const HeartbeatCallbackPtr &callback)=0
Set a heartbeat callback on the connection.
virtual ACM getACM()=0
Get the ACM parameters.
virtual Int timeout() const =0
Get the timeout for the connection.
virtual AsyncResultPtr begin_heartbeat()=0
Send a heartbeat message.
ConnectionPtr PointerType
Definition Connection.h:1182
virtual EndpointPtr getEndpoint() const =0
Get the endpoint from which the connection was created.
virtual void heartbeat()=0
Send a heartbeat message.
virtual void setCloseCallback(const CloseCallbackPtr &callback)=0
Set a close callback on the connection.
virtual void setBufferSize(Int rcvSize, Int sndSize)=0
Set the connection buffer receive/send size.
virtual void throwException() const =0
Throw an exception indicating the reason for connection closure.
virtual void close(ConnectionClose mode)=0
Manually close the connection using the specified closure mode.
An application can implement this interface to receive notifications when a connection receives a hea...
Definition Connection.h:1141
HeartbeatCallbackPtr PointerType
Definition Connection.h:1144
virtual void heartbeat(const ConnectionPtr &con)=0
This method is called by the connection when a heartbeat is received from the peer.
virtual ~HeartbeatCallback()
Provides access to the connection details of an IP connection.
Definition Connection.h:1422
IPConnectionInfoPtr PointerType
Definition Connection.h:1425
::Ice::Int localPort
The local port.
Definition Connection.h:1470
IPConnectionInfo(const ::Ice::ConnectionInfoPtr &underlying, bool incoming, const ::std::string &adapterName, const ::std::string &connectionId, const ::std::string &localAddress, ::Ice::Int localPort, const ::std::string &remoteAddress, ::Ice::Int remotePort)
One-shot constructor to initialize all data members.
Definition Connection.h:1449
virtual ~IPConnectionInfo()
::std::string remoteAddress
The remote address.
Definition Connection.h:1474
IPConnectionInfo()
Default constructor that assigns default values to members as specified in the Slice definition.
Definition Connection.h:1430
::Ice::Int remotePort
The remote port.
Definition Connection.h:1478
::std::string localAddress
The local address.
Definition Connection.h:1466
Base class for local Slice classes and interfaces.
Definition LocalObject.h:25
Provides access to the connection details of a TCP connection.
Definition Connection.h:1498
::Ice::Int sndSize
The connection buffer send size.
Definition Connection.h:1544
virtual ~TCPConnectionInfo()
TCPConnectionInfo(const ::Ice::ConnectionInfoPtr &underlying, bool incoming, const ::std::string &adapterName, const ::std::string &connectionId, const ::std::string &localAddress, ::Ice::Int localPort, const ::std::string &remoteAddress, ::Ice::Int remotePort, ::Ice::Int rcvSize, ::Ice::Int sndSize)
One-shot constructor to initialize all data members.
Definition Connection.h:1525
TCPConnectionInfoPtr PointerType
Definition Connection.h:1501
::Ice::Int rcvSize
The connection buffer receive size.
Definition Connection.h:1540
TCPConnectionInfo()
Default constructor that assigns default values to members as specified in the Slice definition.
Definition Connection.h:1506
Provides access to the connection details of a UDP connection.
Definition Connection.h:1564
::std::string mcastAddress
The multicast address.
Definition Connection.h:1611
virtual ~UDPConnectionInfo()
::Ice::Int sndSize
The connection buffer send size.
Definition Connection.h:1623
UDPConnectionInfoPtr PointerType
Definition Connection.h:1567
::Ice::Int mcastPort
The multicast port.
Definition Connection.h:1615
UDPConnectionInfo(const ::Ice::ConnectionInfoPtr &underlying, bool incoming, const ::std::string &adapterName, const ::std::string &connectionId, const ::std::string &localAddress, ::Ice::Int localPort, const ::std::string &remoteAddress, ::Ice::Int remotePort, const ::std::string &mcastAddress, ::Ice::Int mcastPort, ::Ice::Int rcvSize, ::Ice::Int sndSize)
One-shot constructor to initialize all data members.
Definition Connection.h:1594
::Ice::Int rcvSize
The connection buffer receive size.
Definition Connection.h:1619
UDPConnectionInfo()
Default constructor that assigns default values to members as specified in the Slice definition.
Definition Connection.h:1572
Provides access to the connection details of a WebSocket connection.
Definition Connection.h:1643
::Ice::HeaderDict headers
The headers from the HTTP upgrade request.
Definition Connection.h:1676
WSConnectionInfo(const ::Ice::ConnectionInfoPtr &underlying, bool incoming, const ::std::string &adapterName, const ::std::string &connectionId, const ::Ice::HeaderDict &headers)
One-shot constructor to initialize all data members.
Definition Connection.h:1662
WSConnectionInfo()
Definition Connection.h:1650
WSConnectionInfoPtr PointerType
Definition Connection.h:1646
virtual ~WSConnectionInfo()
Definition BuiltinSequences.h:113
int Int
The mapping for the Slice int type.
Definition Config.h:54
::IceInternal::Handle< TCPConnectionInfo > TCPConnectionInfoPtr
Definition Connection.h:791
IceUtil::Handle< ::IceInternal::GenericCallbackBase > CallbackPtr
Definition OutgoingAsync.h:822
::IceInternal::Handle< UDPConnectionInfo > UDPConnectionInfoPtr
Definition Connection.h:797
IceInternal::ProxyHandle< ::IceProxy::Ice::Object > ObjectPrx
Smart pointer for an object proxy.
Definition ProxyF.h:47
::IceInternal::Handle< CloseCallback > CloseCallbackPtr
Definition Connection.h:773
ACMHeartbeat
Specifies the heartbeat semantics for Active Connection Management.
Definition Connection.h:863
@ HeartbeatAlways
Send a heartbeat at regular intervals until the connection is closed.
Definition Connection.h:879
@ HeartbeatOnIdle
Send a heartbeat at regular intervals when the connection is idle.
Definition Connection.h:875
@ HeartbeatOnDispatch
Send a heartbeat at regular intervals if the connection is idle and only if there are pending dispatc...
Definition Connection.h:871
@ HeartbeatOff
Disables heartbeats.
Definition Connection.h:867
ConnectionClose
Determines the behavior when manually closing a connection.
Definition Connection.h:977
@ ConnectionCloseGracefullyWithWait
Wait for all pending invocations to complete before closing the connection.
Definition Connection.h:991
@ ConnectionCloseGracefully
Close the connection by notifying the peer but do not wait for pending outgoing invocations to comple...
Definition Connection.h:987
@ ConnectionCloseForcefully
Close the connection immediately without sending a close connection protocol message to the peer and ...
Definition Connection.h:982
::IceInternal::Handle< Connection > ConnectionPtr
Definition Connection.h:767
::IceInternal::Handle< WSConnectionInfo > WSConnectionInfoPtr
Definition Connection.h:803
IceInternal::Handle< LocalObject > LocalObjectPtr
Definition LocalObjectF.h:17
::IceUtil::Handle< Callback_Connection_flushBatchRequests_Base > Callback_Connection_flushBatchRequestsPtr
Definition Connection.h:1010
IceInternal::Handle< AsyncResult > AsyncResultPtr
Definition AsyncResultF.h:18
CompressBatch
The batch compression option when flushing queued batch requests.
Definition Connection.h:814
@ CompressBatchYes
Compress the batch requests.
Definition Connection.h:818
@ CompressBatchNo
Don't compress the batch requests.
Definition Connection.h:822
@ CompressBatchBasedOnProxy
Compress the batch requests if at least one request was made on a compressed proxy.
Definition Connection.h:827
::IceInternal::Handle< Endpoint > EndpointPtr
Definition Endpoint.h:468
::IceInternal::Handle< ObjectAdapter > ObjectAdapterPtr
Definition ObjectAdapter.h:620
::std::map< ::std::string, ::std::string > HeaderDict
A collection of HTTP headers.
Definition Connection.h:997
IceUtil::Shared * upCast(::Ice::AsyncResult *)
::IceInternal::Handle< HeartbeatCallback > HeartbeatCallbackPtr
Definition Connection.h:779
::IceUtil::Handle< Callback_Connection_heartbeat_Base > Callback_Connection_heartbeatPtr
Definition Connection.h:1018
::IceInternal::Handle< ConnectionInfo > ConnectionInfoPtr
Definition Connection.h:761
ACMClose
Specifies the close semantics for Active Connection Management.
Definition Connection.h:834
@ CloseOff
Disables automatic connection closure.
Definition Connection.h:838
@ CloseOnIdle
Gracefully closes a connection that has been idle for the configured timeout period.
Definition Connection.h:842
@ CloseOnInvocationAndIdle
Combines the behaviors of CloseOnIdle and CloseOnInvocation.
Definition Connection.h:851
@ CloseOnInvocation
Forcefully closes a connection that has been idle for the configured timeout period,...
Definition Connection.h:847
@ CloseOnIdleForceful
Forcefully closes a connection that has been idle for the configured timeout period,...
Definition Connection.h:856
::IceInternal::Handle< IPConnectionInfo > IPConnectionInfoPtr
Definition Connection.h:785
A collection of Active Connection Management configuration settings.
Definition Connection.h:887
::Ice::Int timeout
A timeout value in seconds.
Definition Connection.h:891
bool operator>=(const ACM &rhs_) const
Definition Connection.h:967
::Ice::ACMClose close
The close semantics.
Definition Connection.h:895
bool operator!=(const ACM &rhs_) const
Definition Connection.h:955
bool operator>(const ACM &rhs_) const
Definition Connection.h:963
bool operator==(const ACM &rhs_) const
Definition Connection.h:901
::Ice::ACMHeartbeat heartbeat
The heartbeat semantics.
Definition Connection.h:899
bool operator<(const ACM &rhs_) const
Definition Connection.h:922
bool operator<=(const ACM &rhs_) const
Definition Connection.h:959
The identity of an Ice object.
Definition Identity.h:144