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 < 10
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 // C++11 mapping
64 class IPConnectionInfo;
65 class TCPConnectionInfo;
66 class UDPConnectionInfo;
67 class WSConnectionInfo;
115 CloseOnInvocationAndIdle,
169 std::tuple<const int&, const ::Ice::ACMClose&, const ::Ice::ACMHeartbeat&>
ice_tuple()
const
201 using Ice::operator<;
202 using Ice::operator<=;
203 using Ice::operator>;
204 using Ice::operator>=;
205 using Ice::operator==;
206 using Ice::operator!=;
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)
271 using CloseCallback = ::std::function<void(const ::std::shared_ptr<Connection>& con)>;
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;
353 flushBatchRequestsAsync(compress).get();
366 virtual ::std::function<void()>
368 ::std::function<
void(::std::exception_ptr)> exception,
369 ::std::function<
void(
bool)> sent =
nullptr) = 0;
379 template<
template<
typename>
class P = ::std::promise>
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();
419 heartbeatAsync().get();
428 virtual ::std::function<void()>
430 ::std::function<
void(
bool)> sent =
nullptr) = 0;
436 template<
template<
typename>
class P = ::std::promise>
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();
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;
499 virtual
void setBufferSize(
int rcvSize,
int sndSize) = 0;
508 virtual
void throwException() const = 0;
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) :
547 localAddress(localAddress),
548 localPort(localPort),
549 remoteAddress(remoteAddress),
550 remotePort(remotePort)
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),
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),
737 using ConnectionInfoPtr = ::std::shared_ptr<ConnectionInfo>;
739 using ConnectionPtr = ::std::shared_ptr<Connection>;
741 using IPConnectionInfoPtr = ::std::shared_ptr<IPConnectionInfo>;
743 using TCPConnectionInfoPtr = ::std::shared_ptr<TCPConnectionInfo>;
745 using UDPConnectionInfoPtr = ::std::shared_ptr<UDPConnectionInfo>;
747 using WSConnectionInfoPtr = ::std::shared_ptr<WSConnectionInfo>;
752 #else // C++98 mapping
757 class ConnectionInfo;
761 typedef ::IceInternal::Handle< ConnectionInfo> ConnectionInfoPtr;
767 typedef ::IceInternal::Handle< Connection> ConnectionPtr;
773 typedef ::IceInternal::Handle< CloseCallback> CloseCallbackPtr;
779 typedef ::IceInternal::Handle< HeartbeatCallback> HeartbeatCallbackPtr;
781 class IPConnectionInfo;
785 typedef ::IceInternal::Handle< IPConnectionInfo> IPConnectionInfoPtr;
787 class TCPConnectionInfo;
791 typedef ::IceInternal::Handle< TCPConnectionInfo> TCPConnectionInfoPtr;
793 class UDPConnectionInfo;
797 typedef ::IceInternal::Handle< UDPConnectionInfo> UDPConnectionInfoPtr;
799 class WSConnectionInfo;
803 typedef ::IceInternal::Handle< WSConnectionInfo> WSConnectionInfoPtr;
827 CompressBatchBasedOnProxy
851 CloseOnInvocationAndIdle,
907 if(timeout != rhs_.timeout)
911 if(close != rhs_.close)
915 if(heartbeat != rhs_.heartbeat)
928 if(timeout < rhs_.timeout)
932 else if(rhs_.timeout < timeout)
936 if(close < rhs_.close)
940 else if(rhs_.close < close)
944 if(heartbeat < rhs_.heartbeat)
948 else if(rhs_.heartbeat < heartbeat)
982 ConnectionCloseForcefully,
987 ConnectionCloseGracefully,
991 ConnectionCloseGracefullyWithWait
997 typedef ::std::map< ::std::string, ::std::string>
HeaderDict;
1009 class Callback_Connection_flushBatchRequests_Base :
public virtual ::IceInternal::CallbackBase { };
1010 typedef ::IceUtil::Handle< Callback_Connection_flushBatchRequests_Base> Callback_Connection_flushBatchRequestsPtr;
1017 class Callback_Connection_heartbeat_Base :
public virtual ::IceInternal::CallbackBase { };
1018 typedef ::IceUtil::Handle< Callback_Connection_heartbeat_Base> Callback_Connection_heartbeatPtr;
1029 class ICE_API ConnectionInfo :
public virtual LocalObject
1033 typedef ConnectionInfoPtr PointerType;
1035 virtual ~ConnectionInfo();
1048 ConnectionInfo(const ::Ice::ConnectionInfoPtr& underlying,
bool incoming, const ::std::string& adapterName, const ::std::string& connectionId) :
1049 underlying(underlying),
1051 adapterName(adapterName),
1052 connectionId(connectionId)
1056 #ifdef ICE_CPP11_COMPILER
1057 ConnectionInfo(
const ConnectionInfo&) =
default;
1058 ConnectionInfo& operator=(
const ConnectionInfo&) =
default;
1065 ::Ice::ConnectionInfoPtr underlying;
1074 ::std::string adapterName;
1078 ::std::string connectionId;
1082 inline bool operator==(
const ConnectionInfo& lhs,
const ConnectionInfo& rhs)
1084 return static_cast<const LocalObject&
>(lhs) ==
static_cast<const LocalObject&
>(rhs);
1087 inline bool operator<(
const ConnectionInfo& lhs,
const ConnectionInfo& rhs)
1089 return static_cast<const LocalObject&
>(lhs) <
static_cast<const LocalObject&
>(rhs);
1103 typedef CloseCallbackPtr PointerType;
1107 #ifdef ICE_CPP11_COMPILER
1119 virtual void closed(
const ConnectionPtr& con) = 0;
1125 return static_cast<const LocalObject&
>(lhs) ==
static_cast<const LocalObject&
>(rhs);
1130 return static_cast<const LocalObject&
>(lhs) <
static_cast<const LocalObject&
>(rhs);
1144 typedef HeartbeatCallbackPtr PointerType;
1148 #ifdef ICE_CPP11_COMPILER
1159 virtual void heartbeat(
const ConnectionPtr& con) = 0;
1165 return static_cast<const LocalObject&
>(lhs) ==
static_cast<const LocalObject&
>(rhs);
1170 return static_cast<const LocalObject&
>(lhs) <
static_cast<const LocalObject&
>(rhs);
1178 class ICE_API Connection :
public virtual LocalObject
1182 typedef ConnectionPtr PointerType;
1184 virtual ~Connection();
1186 #ifdef ICE_CPP11_COMPILER
1187 Connection() =
default;
1188 Connection(
const Connection&) =
default;
1189 Connection& operator=(
const Connection&) =
default;
1211 virtual ObjectPrx createProxy(
const Identity&
id)
const = 0;
1229 virtual void setAdapter(
const ObjectAdapterPtr& adapter) = 0;
1238 virtual ObjectAdapterPtr getAdapter() const
ICE_NOEXCEPT = 0;
1244 virtual EndpointPtr getEndpoint() const
ICE_NOEXCEPT = 0;
1253 virtual
void flushBatchRequests(
CompressBatch compress) = 0;
1263 virtual AsyncResultPtr begin_flushBatchRequests(
CompressBatch compress) = 0;
1275 virtual AsyncResultPtr begin_flushBatchRequests(
CompressBatch compress, const CallbackPtr& cb, const
LocalObjectPtr& cookie = 0) = 0;
1287 virtual AsyncResultPtr begin_flushBatchRequests(
CompressBatch compress, const Callback_Connection_flushBatchRequestsPtr& cb, const
LocalObjectPtr& cookie = 0) = 0;
1295 virtual
void end_flushBatchRequests(const AsyncResultPtr& result) = 0;
1304 virtual
void setCloseCallback(const CloseCallbackPtr& callback) = 0;
1312 virtual
void setHeartbeatCallback(const HeartbeatCallbackPtr& callback) = 0;
1317 virtual
void heartbeat() = 0;
1323 virtual AsyncResultPtr begin_heartbeat() = 0;
1331 virtual AsyncResultPtr begin_heartbeat(const CallbackPtr& cb, const
LocalObjectPtr& cookie = 0) = 0;
1339 virtual AsyncResultPtr begin_heartbeat(const Callback_Connection_heartbeatPtr& cb, const
LocalObjectPtr& cookie = 0) = 0;
1345 virtual
void end_heartbeat(const AsyncResultPtr& result) = 0;
1380 virtual ::std::
string toString() const
ICE_NOEXCEPT = 0;
1386 virtual ConnectionInfoPtr getInfo() const = 0;
1393 virtual
void setBufferSize(
Int rcvSize,
Int sndSize) = 0;
1402 virtual
void throwException() const = 0;
1406 inline
bool operator==(const Connection& lhs, const Connection& rhs)
1408 return static_cast<const LocalObject&
>(lhs) ==
static_cast<const LocalObject&
>(rhs);
1411 inline bool operator<(
const Connection& lhs,
const Connection& rhs)
1413 return static_cast<const LocalObject&
>(lhs) <
static_cast<const LocalObject&
>(rhs);
1421 class ICE_API IPConnectionInfo :
public ConnectionInfo
1425 typedef IPConnectionInfoPtr PointerType;
1427 virtual ~IPConnectionInfo();
1430 IPConnectionInfo() :
1449 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) :
1450 ::
Ice::ConnectionInfo(underlying, incoming, adapterName, connectionId),
1451 localAddress(localAddress),
1452 localPort(localPort),
1453 remoteAddress(remoteAddress),
1454 remotePort(remotePort)
1458 #ifdef ICE_CPP11_COMPILER
1459 IPConnectionInfo(
const IPConnectionInfo&) =
default;
1460 IPConnectionInfo& operator=(
const IPConnectionInfo&) =
default;
1466 ::std::string localAddress;
1474 ::std::string remoteAddress;
1482 inline bool operator==(
const IPConnectionInfo& lhs,
const IPConnectionInfo& rhs)
1484 return static_cast<const LocalObject&
>(lhs) ==
static_cast<const LocalObject&
>(rhs);
1487 inline bool operator<(
const IPConnectionInfo& lhs,
const IPConnectionInfo& rhs)
1489 return static_cast<const LocalObject&
>(lhs) <
static_cast<const LocalObject&
>(rhs);
1497 class ICE_API TCPConnectionInfo :
public IPConnectionInfo
1501 typedef TCPConnectionInfoPtr PointerType;
1503 virtual ~TCPConnectionInfo();
1506 TCPConnectionInfo() :
1525 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) :
1526 ::
Ice::IPConnectionInfo(underlying, incoming, adapterName, connectionId, localAddress, localPort, remoteAddress, remotePort),
1532 #ifdef ICE_CPP11_COMPILER
1533 TCPConnectionInfo(
const TCPConnectionInfo&) =
default;
1534 TCPConnectionInfo& operator=(
const TCPConnectionInfo&) =
default;
1548 inline bool operator==(
const TCPConnectionInfo& lhs,
const TCPConnectionInfo& rhs)
1550 return static_cast<const LocalObject&
>(lhs) ==
static_cast<const LocalObject&
>(rhs);
1553 inline bool operator<(
const TCPConnectionInfo& lhs,
const TCPConnectionInfo& rhs)
1555 return static_cast<const LocalObject&
>(lhs) <
static_cast<const LocalObject&
>(rhs);
1563 class ICE_API UDPConnectionInfo :
public IPConnectionInfo
1567 typedef UDPConnectionInfoPtr PointerType;
1569 virtual ~UDPConnectionInfo();
1572 UDPConnectionInfo() :
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) :
1595 ::
Ice::IPConnectionInfo(underlying, incoming, adapterName, connectionId, localAddress, localPort, remoteAddress, remotePort),
1596 mcastAddress(mcastAddress),
1597 mcastPort(mcastPort),
1603 #ifdef ICE_CPP11_COMPILER
1604 UDPConnectionInfo(
const UDPConnectionInfo&) =
default;
1605 UDPConnectionInfo& operator=(
const UDPConnectionInfo&) =
default;
1611 ::std::string mcastAddress;
1627 inline bool operator==(
const UDPConnectionInfo& lhs,
const UDPConnectionInfo& rhs)
1629 return static_cast<const LocalObject&
>(lhs) ==
static_cast<const LocalObject&
>(rhs);
1632 inline bool operator<(
const UDPConnectionInfo& lhs,
const UDPConnectionInfo& rhs)
1634 return static_cast<const LocalObject&
>(lhs) <
static_cast<const LocalObject&
>(rhs);
1642 class ICE_API WSConnectionInfo :
public ConnectionInfo
1646 typedef WSConnectionInfoPtr PointerType;
1648 virtual ~WSConnectionInfo();
1662 WSConnectionInfo(const ::Ice::ConnectionInfoPtr& underlying,
bool incoming, const ::std::string& adapterName, const ::std::string& connectionId,
const ::Ice::HeaderDict& headers) :
1663 ::
Ice::ConnectionInfo(underlying, incoming, adapterName, connectionId),
1668 #ifdef ICE_CPP11_COMPILER
1669 WSConnectionInfo(
const WSConnectionInfo&) =
default;
1670 WSConnectionInfo& operator=(
const WSConnectionInfo&) =
default;
1680 inline bool operator==(
const WSConnectionInfo& lhs,
const WSConnectionInfo& rhs)
1682 return static_cast<const LocalObject&
>(lhs) ==
static_cast<const LocalObject&
>(rhs);
1685 inline bool operator<(
const WSConnectionInfo& lhs,
const WSConnectionInfo& rhs)
1687 return static_cast<const LocalObject&
>(lhs) <
static_cast<const LocalObject&
>(rhs);