1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282
|
classdef Connection < IceInternal.WrapperObject
% Connection Summary of Connection
%
% The user-level interface to a connection.
%
% Connection Methods:
% close - Manually close the connection using the specified closure mode.
% closeAsync - Manually close the connection using the specified closure
% mode.
% createProxy - Create a special proxy that always uses this connection.
% getEndpoint - Get the endpoint from which the connection was created.
% flushBatchRequests - Flush any pending batch requests for this
% connection.
% flushBatchRequestsAsync - Flush any pending batch requests for this
% connection.
% heartbeat - Send a heartbeat message.
% heartbeatAsync - Send a heartbeat message.
% setACM - Set the active connection management parameters.
% getACM - Get the ACM parameters.
% type - Return the connection type.
% timeout - Get the timeout for the connection.
% toString - Return a description of the connection as human readable
% text, suitable for logging or error messages.
% getInfo - Returns the connection information.
% setBufferSize - Set the connection buffer receive/send size.
% throwException - Throw an exception indicating the reason for
% connection closure.
% Copyright (c) ZeroC, Inc. All rights reserved.
methods
function obj = Connection(impl, communicator)
if ~isa(impl, 'lib.pointer')
throw(MException('Ice:ArgumentException', 'invalid argument'));
end
obj = obj@IceInternal.WrapperObject(impl);
obj.communicator = communicator;
end
function r = eq(obj, other)
%
% Override == operator.
%
if isempty(other) || ~isa(other, 'Ice.Connection')
r = false;
else
%
% Call into C++ to compare the two objects.
%
r = obj.iceCallWithResult('equals', other.impl_);
end
end
function close(obj, mode)
% close Manually close the connection using the specified
% closure mode.
%
% Parameters:
% mode (Ice.ConnectionClose) - Determines how the connection
% will be closed.
obj.iceCall('close', mode);
end
function f = closeAsync(obj)
% closeAsync Manually close the connection using the specified
% closure mode.
%
% Parameters:
% mode (Ice.ConnectionClose) - Determines how the connection
% will be closed.
%
% Returns (Ice.Future) - A future that will be completed when the
% invocation completes.
future = libpointer('voidPtr');
obj.iceCall('closeAsync', future);
assert(~isNull(future));
f = Ice.Future(future, 'close', 0, 'Ice_SimpleFuture', @(fut) fut.iceCall('check'));
end
function r = createProxy(obj, id)
% createProxy Create a special proxy that always uses this
% connection. This can be used for callbacks from a server to a
% client if the server cannot directly establish a connection to
% the client, for example because of firewalls. In this case,
% the server would create a proxy using an already established
% connection from the client.
%
% Parameters:
% id (Ice.Identity) - The identity for which a proxy is to be
% created.
%
% Returns (Ice.ObjectPrx) - A proxy that matches the given identity
% and uses this connection.
proxy = libpointer('voidPtr');
obj.iceCall('createProxy', id, proxy);
r = Ice.ObjectPrx(obj.communicator, obj.communicator.getEncoding(), proxy);
end
function r = getEndpoint(obj)
% getEndpoint Get the endpoint from which the connection was
% created.
%
% Returns (Ice.Endpoint) - The endpoint from which the connection
% was created.
endpoint = libpointer('voidPtr');
obj.iceCall('getEndpoint', endpoint);
r = Ice.Endpoint(endpoint);
end
function flushBatchRequests(obj, compress)
% flushBatchRequests Flush any pending batch requests for this
% connection. This means all batch requests invoked on fixed
% proxies associated with the connection.
%
% Parameters:
% compress (Ice.CompressBatch) - Specifies whether or not the
% queued batch requests should be compressed before being sent
% over the wire.
obj.iceCall('flushBatchRequests', compress);
end
function r = flushBatchRequestsAsync(obj)
% flushBatchRequestsAsync Flush any pending batch requests for
% this connection. This means all batch requests invoked on fixed
% proxies associated with the connection.
%
% Parameters:
% compress (Ice.CompressBatch) - Specifies whether or not the
% queued batch requests should be compressed before being sent
% over the wire.
%
% Returns (Ice.Future) - A future that will be completed when the
% invocation completes.
future = libpointer('voidPtr');
obj.iceCall('flushBatchRequestsAsync', future);
assert(~isNull(future));
r = Ice.Future(future, 'flushBatchRequests', 0, 'Ice_SimpleFuture', @(fut) fut.iceCall('check'));
end
function heartbeat(obj)
% heartbeat Send a heartbeat message.
obj.iceCall('heartbeat');
end
function r = heartbeatAsync(obj)
% heartbeatAsync Send a heartbeat message.
%
% Returns (Ice.Future) - A future that will be completed when the
% invocation completes.
future = libpointer('voidPtr');
obj.iceCall('heartbeatAsync', future);
assert(~isNull(future));
r = Ice.Future(future, 'heartbeat', 0, 'Ice_SimpleFuture', @(fut) fut.iceCall('check'));
end
function setACM(obj, timeout, close, heartbeat)
% setACM Set the active connection management parameters.
%
% Parameters:
% timeout (int32) - The timeout value in milliseconds.
% close (Ice.ACMClose) - The close condition.
% heartbeat (Ice.ACMHeartbeat) - The hertbeat condition.
if timeout == Ice.Unset
timeout = [];
end
if close == Ice.Unset
close = [];
end
if heartbeat == Ice.Unset
heartbeat = [];
end
obj.iceCall('setACM', timeout, close, heartbeat);
end
function r = getACM(obj)
% getACM Get the ACM parameters.
%
% Returns (Ice.ACM) - The ACM parameters.
r = obj.iceCallWithResult('getACM');
if isempty(r.timeout)
r.timeout = Ice.Unset;
end
if isempty(r.close)
r.close = Ice.Unset;
end
if isempty(r.heartbeat)
r.heartbeat = Ice.Unset;
end
end
function r = type(obj)
% type Return the connection type. This corresponds to the
% endpoint type, i.e., "tcp", "udp", etc.
%
% Returns (char) - The type of the connection.
r = obj.iceCallWithResult('type');
end
function r = timeout(obj)
% timeout Get the timeout for the connection.
%
% Returns (int32) - The connection's timeout.
r = obj.iceCallWithResult('timeout');
end
function r = toString(obj)
% toString Return a description of the connection as human
% readable text, suitable for logging or error messages.
%
% Returns (char) - The description of the connection as human
% readable text.
r = obj.iceCallWithResult('toString');
end
function r = getInfo(obj)
% getInfo Returns the connection information.
%
% Returns (Ice.ConnectionInfo) - The connection information.
info = obj.iceCallWithResult('getInfo');
r = obj.createConnectionInfo(info);
end
function setBufferSize(obj, rcvSize, sndSize)
% setBufferSize Set the connection buffer receive/send size.
%
% Parameters:
% rcvSize (int32) - The connection receive buffer size.
% sndSize (int32) - The connection send buffer size.
obj.iceCall('setBufferSize', rcvSize, sndSize);
end
function throwException(obj)
% throwException Throw an exception indicating the reason for
% connection closure. For example, CloseConnectionException is
% raised if the connection was closed gracefully, whereas
% ConnectionManuallyClosedException is raised if the connection
% was manually closed by the application. This operation does
% nothing if the connection is not yet closed.
obj.iceCall('throwException');
end
end
methods(Access=private)
function r = createConnectionInfo(obj, info)
underlying = [];
if ~isempty(info.underlying)
underlying = obj.createConnectionInfo(info.underlying);
end
switch info.type
case 'tcp'
r = Ice.TCPConnectionInfo(underlying, info.incoming, info.adapterName, info.connectionId, ...
info.localAddress, info.localPort, info.remoteAddress, ...
info.remotePort, info.rcvSize, info.sndSize);
case 'ssl'
r = IceSSL.ConnectionInfo(underlying, info.incoming, info.adapterName, info.connectionId, ...
info.cipher, info.certs, info.verified);
case 'udp'
r = Ice.UDPConnectionInfo(underlying, info.incoming, info.adapterName, info.connectionId, ...
info.localAddress, info.localPort, info.remoteAddress, ...
info.remotePort, info.mcastAddress, info.mcastPort, ...
info.rcvSize, info.sndSize);
case 'ws'
r = Ice.WSConnectionInfo(underlying, info.incoming, info.adapterName, info.connectionId, ...
info.headers);
case 'ip'
r = Ice.IPConnectionInfo(underlying, info.incoming, info.adapterName, info.connectionId, ...
info.localAddress, info.localPort, info.remoteAddress, info.remotePort);
otherwise
r = Ice.ConnectionInfo(underlying, info.incoming, info.adapterName, info.connectionId);
end
end
end
properties(Access=private)
communicator % The communicator wrapper
end
end
|