// // Copyright (c) ZeroC, Inc. All rights reserved. // using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.Serialization; using System.Threading; using System.Threading.Tasks; using System.ComponentModel; using IceUtilInternal; using IceInternal; namespace Ice { /// /// Delegate for a successful ice_isA invocation. /// True if the remote object supports the type, false otherwise. /// public delegate void Callback_Object_ice_isA(bool ret); /// /// Delegate for a successful ice_ids invocation. /// The array of Slice type ids supported by the remote object. /// public delegate void Callback_Object_ice_ids(string[] ret); /// /// Delegate for a successful ice_id invocation. /// The Slice type id of the most-derived interface supported by the remote object. /// public delegate void Callback_Object_ice_id(string ret); /// /// Delegate for a successful ice_ping invocation. /// public delegate void Callback_Object_ice_ping(); /// /// Delegate for a successful ice_invoke invocation. /// True if the invocation succeeded, or false if the invocation /// raised a user exception. /// The encoded out-parameters or user exception. /// public delegate void Callback_Object_ice_invoke(bool ret, byte[] outEncaps); /// /// Delegate for a successful ice_getConnection invocation. /// The connection used by the proxy. /// public delegate void Callback_Object_ice_getConnection(Connection ret); /// /// Value type to allow differenciate between a context that is explicity set to /// empty (empty or null dictionary) and a context that has non been set. /// public struct OptionalContext { private OptionalContext(Dictionary ctx) { _ctx = ctx == null ? _emptyContext : ctx; } /// /// Implicit conversion between Dictionary<string, string> and /// OptionalContext. /// /// Dictionary to convert. /// OptionalContext value representing the dictionary public static implicit operator OptionalContext(Dictionary ctx) { return new OptionalContext(ctx); } /// /// Implicit conversion between OptionalContext and /// Dictionary<string, string> /// /// OptionalContext value to convert /// The Dictionary object. public static implicit operator Dictionary(OptionalContext value) { return value._ctx; } private Dictionary _ctx; static private Dictionary _emptyContext = new Dictionary(); } /// /// Base interface of all object proxies. /// public interface ObjectPrx { /// /// Returns the communicator that created this proxy. /// /// The communicator that created this proxy. Communicator ice_getCommunicator(); /// /// Tests whether this object supports a specific Slice interface. /// /// The type ID of the Slice interface to test against. /// The context dictionary for the invocation. /// True if the target object has the interface specified by id or derives /// from the interface specified by id. bool ice_isA(string id, OptionalContext context = new OptionalContext()); /// /// Tests whether this object supports a specific Slice interface. /// /// The type ID of the Slice interface to test against. /// The context dictionary for the invocation. /// Sent progress provider. /// A cancellation token that receives the cancellation requests. /// The task object representing the asynchronous operation. Task ice_isAAsync(string id, OptionalContext context = new OptionalContext(), IProgress progress = null, CancellationToken cancel = new CancellationToken()); /// /// Tests whether this object supports a specific Slice interface. /// /// The type ID of the Slice interface to test against. /// A callback to be invoked when the invocation completes. /// Application-specific data to be stored in the result. /// An asynchronous result object. AsyncResult begin_ice_isA(string id, AsyncCallback callback, object cookie); /// /// Tests whether this object supports a specific Slice interface. /// /// The type ID of the Slice interface to test against. /// The context dictionary for the invocation. /// A callback to be invoked when the invocation completes. /// Application-specific data to be stored in the result. /// An asynchronous result object. AsyncResult begin_ice_isA(string id, OptionalContext context, AsyncCallback callback, object cookie); /// /// Tests whether this object supports a specific Slice interface. /// /// The type ID of the Slice interface to test against. /// The context dictionary for the invocation. /// An asynchronous result object. AsyncResult begin_ice_isA(string id, OptionalContext context = new OptionalContext()); /// /// Tests whether this object supports a specific Slice interface. /// /// The asynchronous result object returned by begin_ice_isA. /// True if the object supports the Slice interface, false otherwise. bool end_ice_isA(AsyncResult result); /// /// Tests whether the target object of this proxy can be reached. /// /// The context dictionary for the invocation. void ice_ping(OptionalContext context = new OptionalContext()); /// /// Tests whether the target object of this proxy can be reached. /// /// The context dictionary for the invocation. /// Sent progress provider. /// A cancellation token that receives the cancellation requests. /// The task object representing the asynchronous operation. Task ice_pingAsync(OptionalContext context = new OptionalContext(), IProgress progress = null, CancellationToken cancel = new CancellationToken()); /// /// Tests whether the target object of this proxy can be reached. /// /// A callback to be invoked when the invocation completes. /// Application-specific data to be stored in the result. /// An asynchronous result object. AsyncResult begin_ice_ping(AsyncCallback callback, object cookie); /// /// Tests whether the target object of this proxy can be reached. /// /// The context dictionary for the invocation. /// A callback to be invoked when the invocation completes. /// Application-specific data to be stored in the result. /// An asynchronous result object. AsyncResult begin_ice_ping(OptionalContext context, AsyncCallback callback, object cookie); /// /// Tests whether the target object of this proxy can be reached. /// /// The context dictionary for the invocation. /// An asynchronous result object. AsyncResult begin_ice_ping(OptionalContext context = new OptionalContext()); /// /// Tests whether the target object of this proxy can be reached. /// /// The asynchronous result object returned by begin_ice_ping. void end_ice_ping(AsyncResult result); /// /// Returns the Slice type IDs of the interfaces supported by the target object of this proxy. /// /// The context dictionary for the invocation. /// The Slice type IDs of the interfaces supported by the target object, in base-to-derived /// order. The first element of the returned array is always ::Ice::Object. string[] ice_ids(OptionalContext context = new OptionalContext()); /// /// Returns the Slice type IDs of the interfaces supported by the target object of this proxy. /// /// The context dictionary for the invocation. /// Sent progress provider. /// A cancellation token that receives the cancellation requests. /// The task object representing the asynchronous operation. Task ice_idsAsync(OptionalContext context = new OptionalContext(), IProgress progress = null, CancellationToken cancel = new CancellationToken()); /// /// Returns the Slice type IDs of the interfaces supported by the target object of this proxy. /// /// A callback to be invoked when the invocation completes. /// Application-specific data to be stored in the result. /// An asynchronous result object. AsyncResult begin_ice_ids(AsyncCallback callback, object cookie); /// /// Returns the Slice type IDs of the interfaces supported by the target object of this proxy. /// /// The context dictionary for the invocation. /// A callback to be invoked when the invocation completes. /// Application-specific data to be stored in the result. /// An asynchronous result object. AsyncResult begin_ice_ids(OptionalContext context, AsyncCallback callback, object cookie); /// /// Returns the Slice type IDs of the interfaces supported by the target object of this proxy. /// /// The context dictionary for the invocation. /// An asynchronous result object. AsyncResult begin_ice_ids(OptionalContext context = new OptionalContext()); /// /// Returns the Slice type IDs of the interfaces supported by the target object of this proxy. /// /// The asynchronous result object returned by begin_ice_ids. /// The Slice type IDs of the interfaces supported by the target object, in base-to-derived /// order. The first element of the returned array is always ::Ice::Object. string[] end_ice_ids(AsyncResult result); /// /// Returns the Slice type ID of the most-derived interface supported by the target object of this proxy. /// /// The context dictionary for the invocation. /// The Slice type ID of the most-derived interface. string ice_id(OptionalContext context = new OptionalContext()); /// /// Returns the Slice type ID of the most-derived interface supported by the target object of this proxy. /// /// The context dictionary for the invocation. /// Sent progress provider. /// A cancellation token that receives the cancellation requests. /// The task object representing the asynchronous operation. Task ice_idAsync(OptionalContext context = new OptionalContext(), IProgress progress = null, CancellationToken cancel = new CancellationToken()); /// /// Returns the Slice type ID of the most-derived interface supported by the target object of this proxy. /// /// A callback to be invoked when the invocation completes. /// Application-specific data to be stored in the result. /// An asynchronous result object. AsyncResult begin_ice_id(AsyncCallback callback, object cookie); /// /// Returns the Slice type ID of the most-derived interface supported by the target object of this proxy. /// /// The context dictionary for the invocation. /// A callback to be invoked when the invocation completes. /// Application-specific data to be stored in the result. /// An asynchronous result object. AsyncResult begin_ice_id(OptionalContext context, AsyncCallback callback, object cookie); /// /// Returns the Slice type ID of the most-derived interface supported by the target object of this proxy. /// /// The context dictionary for the invocation. /// An asynchronous result object. AsyncResult begin_ice_id(OptionalContext context = new OptionalContext()); /// /// Returns the Slice type ID of the most-derived interface supported by the target object of this proxy. /// /// The asynchronous result object returned by begin_ice_id. /// The Slice type ID of the most-derived interface. string end_ice_id(AsyncResult result); /// /// Invokes an operation dynamically. /// /// The name of the operation to invoke. /// The operation mode (normal or idempotent). /// The encoded in-parameters for the operation. /// The encoded out-paramaters and return value /// for the operation. The return value follows any out-parameters. /// The context dictionary for the invocation. /// If the operation completed successfully, the return value /// is true. If the operation raises a user exception, /// the return value is false; in this case, outEncaps /// contains the encoded user exception. If the operation raises a run-time exception, /// it throws it directly. bool ice_invoke(string operation, OperationMode mode, byte[] inEncaps, out byte[] outEncaps, OptionalContext context = new OptionalContext()); /// /// Invokes an operation dynamically. /// /// The name of the operation to invoke. /// The operation mode (normal or idempotent). /// The encoded in-parameters for the operation. /// The context dictionary for the invocation. /// Sent progress provider. /// A cancellation token that receives the cancellation requests. /// The task object representing the asynchronous operation. Task ice_invokeAsync(string operation, OperationMode mode, byte[] inEncaps, OptionalContext context = new OptionalContext(), IProgress progress = null, CancellationToken cancel = new CancellationToken()); /// /// Invokes an operation dynamically. /// /// The name of the operation to invoke. /// The operation mode (normal or idempotent). /// The encoded in-parameters for the operation. /// A callback to be invoked when the invocation completes. /// Application-specific data to be stored in the result. /// An asynchronous result object. AsyncResult begin_ice_invoke(string operation, OperationMode mode, byte[] inEncaps, AsyncCallback callback, object cookie); /// /// Invokes an operation dynamically. /// /// The name of the operation to invoke. /// The operation mode (normal or idempotent). /// The encoded in-parameters for the operation. /// The context dictionary for the invocation. /// A callback to be invoked when the invocation completes. /// Application-specific data to be stored in the result. /// An asynchronous result object. AsyncResult begin_ice_invoke(string operation, OperationMode mode, byte[] inEncaps, OptionalContext context, AsyncCallback callback, object cookie); /// /// Invokes an operation dynamically. /// /// The name of the operation to invoke. /// The operation mode (normal or idempotent). /// The encoded in-parameters for the operation. /// The context dictionary for the invocation. /// An asynchronous result object. AsyncResult begin_ice_invoke(string operation, OperationMode mode, byte[] inEncaps, OptionalContext context = new OptionalContext()); /// /// Completes a dynamic invocation. /// /// The encoded out parameters or user exception. /// The asynchronous result object returned by begin_ice_invoke. /// If the operation completed successfully, the return value /// is true. If the operation raises a user exception, /// the return value is false; in this case, outEncaps /// contains the encoded user exception. If the operation raises a run-time exception, /// it throws it directly. bool end_ice_invoke(out byte[] outEncaps, AsyncResult result); /// /// Returns the identity embedded in this proxy. /// The identity of the target object. /// Identity ice_getIdentity(); /// /// Creates a new proxy that is identical to this proxy, except for the per-proxy context. /// The identity for the new proxy. /// The proxy with the new identity. /// ObjectPrx ice_identity(Identity newIdentity); /// /// Returns the per-proxy context for this proxy. /// /// The per-proxy context. If the proxy does not have a per-proxy (implicit) context, the return value /// is null. Dictionary ice_getContext(); /// /// Creates a new proxy that is identical to this proxy, except for the per-proxy context. /// /// The context for the new proxy. /// The proxy with the new per-proxy context. ObjectPrx ice_context(Dictionary newContext); /// /// Returns the facet for this proxy. /// /// The facet for this proxy. If the proxy uses the default facet, the return value is the /// empty string. string ice_getFacet(); /// /// Creates a new proxy that is identical to this proxy, except for the facet. /// /// The facet for the new proxy. /// The proxy with the new facet. ObjectPrx ice_facet(string newFacet); /// /// Returns the adapter ID for this proxy. /// /// The adapter ID. If the proxy does not have an adapter ID, the return value is the /// empty string. string ice_getAdapterId(); /// /// Creates a new proxy that is identical to this proxy, except for the adapter ID. /// /// The adapter ID for the new proxy. /// The proxy with the new adapter ID. ObjectPrx ice_adapterId(string newAdapterId); /// /// Returns the endpoints used by this proxy. /// /// The endpoints used by this proxy. Endpoint[] ice_getEndpoints(); /// /// Creates a new proxy that is identical to this proxy, except for the endpoints. /// /// The endpoints for the new proxy. /// The proxy with the new endpoints. ObjectPrx ice_endpoints(Endpoint[] newEndpoints); /// /// Returns the locator cache timeout of this proxy. /// /// The locator cache timeout value (in seconds). int ice_getLocatorCacheTimeout(); /// /// Creates a new proxy that is identical to this proxy, except for the locator cache timeout. /// /// The new locator cache timeout (in seconds). ObjectPrx ice_locatorCacheTimeout(int timeout); /// /// Creates a new proxy that is identical to this proxy, except for the invocation timeout. /// /// The new invocation timeout (in seconds). ObjectPrx ice_invocationTimeout(int timeout); /// /// Returns the invocation timeout of this proxy. /// /// The invocation timeout value (in seconds). int ice_getInvocationTimeout(); /// /// Returns whether this proxy caches connections. /// /// True if this proxy caches connections; false, otherwise. bool ice_isConnectionCached(); /// /// Creates a new proxy that is identical to this proxy, except for connection caching. /// /// True if the new proxy should cache connections; false, otherwise. /// The new proxy with the specified caching policy. ObjectPrx ice_connectionCached(bool newCache); /// /// Returns how this proxy selects endpoints (randomly or ordered). /// /// The endpoint selection policy. EndpointSelectionType ice_getEndpointSelection(); /// /// Creates a new proxy that is identical to this proxy, except for the endpoint selection policy. /// /// The new endpoint selection policy. /// The new proxy with the specified endpoint selection policy. ObjectPrx ice_endpointSelection(EndpointSelectionType newType); /// /// Returns whether this proxy communicates only via secure endpoints. /// /// True if this proxy communicates only via secure endpoints; false, otherwise. bool ice_isSecure(); /// /// Creates a new proxy that is identical to this proxy, except for how it selects endpoints. /// /// If b is true, only endpoints that use a secure transport are /// used by the new proxy. If b is false, the returned proxy uses both secure and insecure /// endpoints. /// The new proxy with the specified selection policy. ObjectPrx ice_secure(bool b); /// /// Creates a new proxy that is identical to this proxy, except for the encoding used to marshal /// parameters. /// /// The encoding version to use to marshal requests parameters. /// The new proxy with the specified encoding version. ObjectPrx ice_encodingVersion(EncodingVersion e); /// Returns the encoding version used to marshal requests parameters. /// The encoding version. EncodingVersion ice_getEncodingVersion(); /// /// Returns whether this proxy prefers secure endpoints. /// /// True if the proxy always attempts to invoke via secure endpoints before it /// attempts to use insecure endpoints; false, otherwise. bool ice_isPreferSecure(); /// /// Creates a new proxy that is identical to this proxy, except for its endpoint selection policy. /// /// If b is true, the new proxy will use secure endpoints for invocations /// and only use insecure endpoints if an invocation cannot be made via secure endpoints. If b is /// false, the proxy prefers insecure endpoints to secure ones. /// The new proxy with the new endpoint selection policy. ObjectPrx ice_preferSecure(bool b); /// /// Returns the router for this proxy. /// /// The router for the proxy. If no router is configured for the proxy, the return value /// is null. RouterPrx ice_getRouter(); /// /// Creates a new proxy that is identical to this proxy, except for the router. /// /// The router for the new proxy. /// The new proxy with the specified router. ObjectPrx ice_router(RouterPrx router); /// /// Returns the locator for this proxy. /// /// The locator for this proxy. If no locator is configured, the return value is null. LocatorPrx ice_getLocator(); /// /// Creates a new proxy that is identical to this proxy, except for the locator. /// /// The locator for the new proxy. /// The new proxy with the specified locator. ObjectPrx ice_locator(LocatorPrx locator); /// /// Returns whether this proxy uses collocation optimization. /// /// True if the proxy uses collocation optimization; false, otherwise. bool ice_isCollocationOptimized(); /// /// Creates a new proxy that is identical to this proxy, except for collocation optimization. /// /// True if the new proxy enables collocation optimization; false, otherwise. /// The new proxy the specified collocation optimization. ObjectPrx ice_collocationOptimized(bool b); /// /// Creates a new proxy that is identical to this proxy, but uses twoway invocations. /// /// A new proxy that uses twoway invocations. ObjectPrx ice_twoway(); /// /// Returns whether this proxy uses twoway invocations. /// /// True if this proxy uses twoway invocations; false, otherwise. bool ice_isTwoway(); /// /// Creates a new proxy that is identical to this proxy, but uses oneway invocations. /// /// A new proxy that uses oneway invocations. ObjectPrx ice_oneway(); /// /// Returns whether this proxy uses oneway invocations. /// /// True if this proxy uses oneway invocations; false, otherwise. bool ice_isOneway(); /// /// Creates a new proxy that is identical to this proxy, but uses batch oneway invocations. /// /// A new proxy that uses batch oneway invocations. ObjectPrx ice_batchOneway(); /// /// Returns whether this proxy uses batch oneway invocations. /// /// True if this proxy uses batch oneway invocations; false, otherwise. bool ice_isBatchOneway(); /// /// Creates a new proxy that is identical to this proxy, but uses datagram invocations. /// /// A new proxy that uses datagram invocations. ObjectPrx ice_datagram(); /// /// Returns whether this proxy uses datagram invocations. /// /// True if this proxy uses datagram invocations; false, otherwise. bool ice_isDatagram(); /// /// Creates a new proxy that is identical to this proxy, but uses batch datagram invocations. /// /// A new proxy that uses batch datagram invocations. ObjectPrx ice_batchDatagram(); /// /// Returns whether this proxy uses batch datagram invocations. /// /// True if this proxy uses batch datagram invocations; false, otherwise. bool ice_isBatchDatagram(); /// /// Creates a new proxy that is identical to this proxy, except for compression. /// /// True enables compression for the new proxy; false disables compression. /// A new proxy with the specified compression setting. ObjectPrx ice_compress(bool co); /// /// Obtains the compression override setting of this proxy. /// /// The compression override setting. If no optional value is present, no override is /// set. Otherwise, true if compression is enabled, false otherwise. Ice.Optional ice_getCompress(); /// /// Creates a new proxy that is identical to this proxy, except for its timeout setting. /// /// The timeout for the new proxy in milliseconds. /// A new proxy with the specified timeout. ObjectPrx ice_timeout(int t); /// /// Obtains the timeout override of this proxy. /// /// The timeout override. If no optional value is present, no override is set. Otherwise, /// returns the timeout override value. Ice.Optional ice_getTimeout(); /// /// Creates a new proxy that is identical to this proxy, except for its connection ID. /// /// The connection ID for the new proxy. An empty string removes the /// connection ID. /// A new proxy with the specified connection ID. ObjectPrx ice_connectionId(string connectionId); /// /// Returns the connection id of this proxy. /// /// The connection id. string ice_getConnectionId(); /// /// Returns a proxy that is identical to this proxy, except it's a fixed proxy bound /// the given connection. /// /// The fixed proxy connection. /// A fixed proxy bound to the given connection. ObjectPrx ice_fixed(Ice.Connection connection); /// /// Returns whether this proxy is a fixed proxy. /// /// True if this is a fixed proxy, false otherwise. /// bool ice_isFixed(); /// /// Returns the Connection for this proxy. If the proxy does not yet have an established connection, /// it first attempts to create a connection. /// /// The Connection for this proxy. /// If the proxy uses collocation optimization and denotes a /// collocated object. Connection ice_getConnection(); /// /// Asynchronously gets the connection for this proxy. /// /// Sent progress provider. /// A cancellation token that receives the cancellation requests. /// The task object representing the asynchronous operation. Task ice_getConnectionAsync(IProgress progress = null, CancellationToken cancel = new CancellationToken()); /// /// Asynchronously gets the connection for this proxy. /// /// A callback to be invoked when the invocation completes. /// Application-specific data to be stored in the result. /// An asynchronous result object. AsyncResult begin_ice_getConnection(AsyncCallback callback, object cookie); /// /// Asynchronously gets the connection for this proxy. /// /// An asynchronous result object. AsyncResult begin_ice_getConnection(); /// /// Asynchronously gets the connection for this proxy. /// /// The asynchronous result object returned by begin_ice_getConnection. /// The connection. Connection end_ice_getConnection(AsyncResult result); /// /// Returns the cached Connection for this proxy. If the proxy does not yet have an established /// connection, it does not attempt to create a connection. /// /// The cached Connection for this proxy (null if the proxy does not have /// an established connection). /// If the proxy uses collocation optimization and denotes a /// collocated object. Connection ice_getCachedConnection(); /// /// Flushes any pending batched requests for this proxy. The call blocks until the flush is complete. /// void ice_flushBatchRequests(); /// /// Asynchronously flushes any pending batched requests for this proxy. /// /// Sent progress provider. /// A cancellation token that receives the cancellation requests. /// The task object representing the asynchronous operation. Task ice_flushBatchRequestsAsync(IProgress progress = null, CancellationToken cancel = new CancellationToken()); /// /// Asynchronously flushes any pending batched requests for this proxy. /// /// A callback to be invoked when the invocation completes. /// Application-specific data to be stored in the result. AsyncResult begin_ice_flushBatchRequests(AsyncCallback callback = null, object cookie = null); /// /// Flushes any pending batched requests for this proxy. The call blocks until the flush is complete. /// /// The asynchronous result object returned by begin_ice_getConnection. void end_ice_flushBatchRequests(AsyncResult result); /// /// Write a proxy to the output stream. /// /// Output stream object to write the proxy. [EditorBrowsable(EditorBrowsableState.Never)] void iceWrite(OutputStream os); /// /// Returns a scheduler object that uses the Ice thread pool. /// /// The task scheduler object. System.Threading.Tasks.TaskScheduler ice_scheduler(); } /// /// Represent the result of the ice_invokeAsync operation /// public struct Object_Ice_invokeResult { public Object_Ice_invokeResult(bool returnValue, byte[] outEncaps) { this.returnValue = returnValue; this.outEncaps = outEncaps; } /// /// If the operation completed successfully, the return value /// is true. If the operation raises a user exception, /// the return value is false; in this case, outEncaps /// contains the encoded user exception. /// public bool returnValue; /// /// The encoded out-paramaters and return value for the operation. /// The return value follows any out-parameters. If returnValue is /// false it contains the encoded user exception. /// public byte[] outEncaps; }; /// /// Base class of all object proxies. /// [Serializable] public class ObjectPrxHelperBase : ObjectPrx, ISerializable { public ObjectPrxHelperBase() { } public ObjectPrxHelperBase(SerializationInfo info, StreamingContext context) { Instance instance = null; if(context.Context is Communicator) { instance = IceInternal.Util.getInstance(context.Context as Communicator); } else if(context.Context is Instance) { instance = context.Context as Instance; } else { throw new ArgumentException("Cannot deserialize proxy: Ice.Communicator not found in StreamingContext"); } var proxy = (ObjectPrxHelperBase)instance.proxyFactory().stringToProxy(info.GetString("proxy")); _reference = proxy._reference; Debug.Assert(proxy._requestHandler == null); } public virtual void GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("proxy", ToString()); } /// /// Returns a hash code for this proxy. /// /// The hash code. public override int GetHashCode() { return _reference.GetHashCode(); } /// /// Returns the communicator that created this proxy. /// /// The communicator that created this proxy. public Communicator ice_getCommunicator() { return _reference.getCommunicator(); } /// /// Returns the stringified form of this proxy. /// /// The stringified proxy. public override string ToString() { return _reference.ToString(); } /// /// Tests whether this object supports a specific Slice interface. /// /// The type ID of the Slice interface to test against. /// The context dictionary for the invocation. /// True if the target object has the interface specified by id or derives /// from the interface specified by id. public bool ice_isA(string id, OptionalContext context = new OptionalContext()) { try { return iceI_ice_isAAsync(id, context, null, CancellationToken.None, true).Result; } catch(AggregateException ex) { throw ex.InnerException; } } /// /// Tests whether this object supports a specific Slice interface. /// /// The type ID of the Slice interface to test against. /// The context dictionary for the invocation. /// Sent progress provider. /// A cancellation token that receives the cancellation requests. /// The task object representing the asynchronous operation. public Task ice_isAAsync(string id, OptionalContext context = new OptionalContext(), IProgress progress = null, CancellationToken cancel = new CancellationToken()) { return iceI_ice_isAAsync(id, context, progress, cancel, false); } private Task iceI_ice_isAAsync(string id, OptionalContext context, IProgress progress, CancellationToken cancel, bool synchronous) { iceCheckTwowayOnly(_ice_isA_name); var completed = new OperationTaskCompletionCallback(progress, cancel); iceI_ice_isA(id, context, completed, synchronous); return completed.Task; } /// /// Tests whether this object supports a specific Slice interface. /// /// The type ID of the Slice interface to test against. /// A callback to be invoked when the invocation completes. /// Application-specific data to be stored in the result. /// An asynchronous result object. public AsyncResult begin_ice_isA(string id, AsyncCallback callback, object cookie) { return iceI_begin_ice_isA(id, new OptionalContext(), callback, cookie, false); } /// /// Tests whether this object supports a specific Slice interface. /// /// The type ID of the Slice interface to test against. /// The context dictionary for the invocation. /// A callback to be invoked when the invocation completes. /// Application-specific data to be stored in the result. /// An asynchronous result object. public AsyncResult begin_ice_isA(string id, OptionalContext context, AsyncCallback callback, object cookie) { return iceI_begin_ice_isA(id, context, callback, cookie, false); } /// /// Tests whether this object supports a specific Slice interface. /// /// The type ID of the Slice interface to test against. /// The context dictionary for the invocation. /// An asynchronous result object. public AsyncResult begin_ice_isA(string id, OptionalContext context = new OptionalContext()) { return iceI_begin_ice_isA(id, context, null, null, false); } private const string _ice_isA_name = "ice_isA"; /// /// Tests whether this object supports a specific Slice interface. /// /// The asynchronous result object returned by begin_ice_isA. /// True if the object supports the Slice interface, false otherwise. public bool end_ice_isA(AsyncResult result) { var resultI = AsyncResultI.check(result, this, _ice_isA_name); return ((OutgoingAsyncT)resultI.OutgoingAsync).getResult(resultI.wait()); } private AsyncResult iceI_begin_ice_isA(string id, Dictionary context, AsyncCallback callback, object cookie, bool synchronous) { iceCheckAsyncTwowayOnly(_ice_isA_name); var completed = new OperationAsyncResultCompletionCallback( (Callback_Object_ice_isA cb, bool result) => { if(cb != null) { cb.Invoke(result); } }, this, _ice_isA_name, cookie, callback); iceI_ice_isA(id, context, completed, synchronous); return completed; } private void iceI_ice_isA(string id, Dictionary context, OutgoingAsyncCompletionCallback completed, bool synchronous) { iceCheckAsyncTwowayOnly(_ice_isA_name); getOutgoingAsync(completed).invoke(_ice_isA_name, OperationMode.Nonmutating, FormatType.DefaultFormat, context, synchronous, (OutputStream os) => { os.writeString(id); }, null, (InputStream iss) => { return iss.readBool(); }); } /// /// Tests whether the target object of this proxy can be reached. /// /// The context dictionary for the invocation. public void ice_ping(OptionalContext context = new OptionalContext()) { try { iceI_ice_pingAsync(context, null, CancellationToken.None, true).Wait(); } catch(AggregateException ex) { throw ex.InnerException; } } /// /// Tests whether the target object of this proxy can be reached. /// /// The context dictionary for the invocation. /// Sent progress provider. /// A cancellation token that receives the cancellation requests. /// The task object representing the asynchronous operation. public Task ice_pingAsync(OptionalContext context = new OptionalContext(), IProgress progress = null, CancellationToken cancel = new CancellationToken()) { return iceI_ice_pingAsync(context, progress, cancel, false); } private Task iceI_ice_pingAsync(OptionalContext context, IProgress progress, CancellationToken cancel, bool synchronous) { var completed = new OperationTaskCompletionCallback(progress, cancel); iceI_ice_ping(context, completed, synchronous); return completed.Task; } /// /// Tests whether the target object of this proxy can be reached. /// /// A callback to be invoked when the invocation completes. /// Application-specific data to be stored in the result. /// An asynchronous result object. public AsyncResult begin_ice_ping(AsyncCallback callback, object cookie) { return iceI_begin_ice_ping(new OptionalContext(), callback, cookie, false); } /// /// Tests whether the target object of this proxy can be reached. /// /// The context dictionary for the invocation. /// A callback to be invoked when the invocation completes. /// Application-specific data to be stored in the result. /// An asynchronous result object. public AsyncResult begin_ice_ping(OptionalContext context, AsyncCallback callback, object cookie) { return iceI_begin_ice_ping(context, callback, cookie, false); } /// /// Tests whether the target object of this proxy can be reached. /// /// The context dictionary for the invocation. /// An asynchronous result object. public AsyncResult begin_ice_ping(OptionalContext context = new OptionalContext()) { return iceI_begin_ice_ping(context, null, null, false); } private const string _ice_ping_name = "ice_ping"; /// /// Tests whether the target object of this proxy can be reached. /// /// The asynchronous result object returned by begin_ice_ping. public void end_ice_ping(AsyncResult result) { var resultI = AsyncResultI.check(result, this, _ice_ping_name); ((OutgoingAsyncT)resultI.OutgoingAsync).getResult(resultI.wait()); } private AsyncResult iceI_begin_ice_ping(Dictionary context, AsyncCallback callback, object cookie, bool synchronous) { var completed = new OperationAsyncResultCompletionCallback( (Callback_Object_ice_ping cb, object result) => { if(cb != null) { cb.Invoke(); } }, this, _ice_ping_name, cookie, callback); iceI_ice_ping(context, completed, synchronous); return completed; } private void iceI_ice_ping(Dictionary context, OutgoingAsyncCompletionCallback completed, bool synchronous) { getOutgoingAsync(completed).invoke(_ice_ping_name, OperationMode.Nonmutating, FormatType.DefaultFormat, context, synchronous); } /// /// Returns the Slice type IDs of the interfaces supported by the target object of this proxy. /// /// The context dictionary for the invocation. /// The Slice type IDs of the interfaces supported by the target object, in base-to-derived /// order. The first element of the returned array is always ::Ice::Object. public string[] ice_ids(OptionalContext context = new OptionalContext()) { try { return iceI_ice_idsAsync(context, null, CancellationToken.None, true).Result; } catch(AggregateException ex) { throw ex.InnerException; } } /// /// Returns the Slice type IDs of the interfaces supported by the target object of this proxy. /// /// The context dictionary for the invocation. /// Sent progress provider. /// A cancellation token that receives the cancellation requests. /// The task object representing the asynchronous operation. public Task ice_idsAsync(OptionalContext context = new OptionalContext(), IProgress progress = null, CancellationToken cancel = new CancellationToken()) { return iceI_ice_idsAsync(context, progress, cancel, false); } private Task iceI_ice_idsAsync(OptionalContext context, IProgress progress, CancellationToken cancel, bool synchronous) { iceCheckTwowayOnly(_ice_ids_name); var completed = new OperationTaskCompletionCallback(progress, cancel); iceI_ice_ids(context, completed, synchronous); return completed.Task; } /// /// Returns the Slice type IDs of the interfaces supported by the target object of this proxy. /// /// A callback to be invoked when the invocation completes. /// Application-specific data to be stored in the result. /// An asynchronous result object. public AsyncResult begin_ice_ids(AsyncCallback callback, object cookie) { return iceI_begin_ice_ids(new OptionalContext(), callback, cookie, false); } /// /// Returns the Slice type ID of the most-derived interface supported by the target object of this proxy. /// /// The context dictionary for the invocation. /// A callback to be invoked when the invocation completes. /// Application-specific data to be stored in the result. /// An asynchronous result object. public AsyncResult begin_ice_ids(OptionalContext context, AsyncCallback callback, object cookie) { return iceI_begin_ice_ids(context, callback, cookie, false); } public AsyncResult begin_ice_ids(OptionalContext context = new OptionalContext()) { return iceI_begin_ice_ids(context, null, null, false); } private const string _ice_ids_name = "ice_ids"; private AsyncResult iceI_begin_ice_ids(Dictionary context, AsyncCallback callback, object cookie, bool synchronous) { iceCheckAsyncTwowayOnly(_ice_ids_name); var completed = new OperationAsyncResultCompletionCallback( (Callback_Object_ice_ids cb, string[] result) => { if(cb != null) { cb.Invoke(result); } }, this, _ice_ids_name, cookie, callback); iceI_ice_ids(context, completed, synchronous); return completed; } /// /// Returns the Slice type IDs of the interfaces supported by the target object of this proxy. /// /// The asynchronous result object returned by begin_ice_ids. /// The Slice type IDs of the interfaces supported by the target object, in base-to-derived /// order. The first element of the returned array is always ::Ice::Object. public string[] end_ice_ids(AsyncResult result) { var resultI = AsyncResultI.check(result, this, _ice_ids_name); return ((OutgoingAsyncT)resultI.OutgoingAsync).getResult(resultI.wait()); } private void iceI_ice_ids(Dictionary context, OutgoingAsyncCompletionCallback completed, bool synchronous) { iceCheckAsyncTwowayOnly(_ice_ids_name); getOutgoingAsync(completed).invoke(_ice_ids_name, OperationMode.Nonmutating, FormatType.DefaultFormat, context, synchronous, read: (InputStream iss) => { return iss.readStringSeq(); }); } /// /// Returns the Slice type ID of the most-derived interface supported by the target object of this proxy. /// /// The Slice type ID of the most-derived interface. public string ice_id(OptionalContext context = new OptionalContext()) { try { return iceI_ice_idAsync(context, null, CancellationToken.None, true).Result; } catch(AggregateException ex) { throw ex.InnerException; } } /// /// Returns the Slice type ID of the most-derived interface supported by the target object of this proxy. /// /// The context dictionary for the invocation. /// Sent progress provider. /// A cancellation token that receives the cancellation requests. /// The task object representing the asynchronous operation. public Task ice_idAsync(OptionalContext context = new OptionalContext(), IProgress progress = null, CancellationToken cancel = new CancellationToken()) { return iceI_ice_idAsync(context, progress, cancel, false); } private Task iceI_ice_idAsync(OptionalContext context, IProgress progress, CancellationToken cancel, bool synchronous) { iceCheckTwowayOnly(_ice_id_name); var completed = new OperationTaskCompletionCallback(progress, cancel); iceI_ice_id(context, completed, synchronous); return completed.Task; } /// /// Returns the Slice type ID of the most-derived interface supported by the target object of this proxy. /// /// A callback to be invoked when the invocation completes. /// Application-specific data to be stored in the result. /// An asynchronous result object. public AsyncResult begin_ice_id(AsyncCallback callback, object cookie) { return iceI_begin_ice_id(new OptionalContext(), callback, cookie, false); } /// /// Returns the Slice type ID of the most-derived interface supported by the target object of this proxy. /// /// The context dictionary for the invocation. /// A callback to be invoked when the invocation completes. /// Application-specific data to be stored in the result. /// An asynchronous result object. public AsyncResult begin_ice_id(OptionalContext context, AsyncCallback callback, object cookie) { return iceI_begin_ice_id(context, callback, cookie, false); } /// /// Returns the Slice type ID of the most-derived interface supported by the target object of this proxy. /// /// The context dictionary for the invocation. /// An asynchronous result object. public AsyncResult begin_ice_id(OptionalContext context = new OptionalContext()) { return iceI_begin_ice_id(context, null, null, false); } private const string _ice_id_name = "ice_id"; private AsyncResult iceI_begin_ice_id(Dictionary context, AsyncCallback callback, object cookie, bool synchronous) { iceCheckAsyncTwowayOnly(_ice_id_name); var completed = new OperationAsyncResultCompletionCallback( (Callback_Object_ice_id cb, string result) => { if(cb != null) { cb.Invoke(result); } }, this, _ice_id_name, cookie, callback); iceI_ice_id(context, completed, synchronous); return completed; } /// /// Returns the Slice type ID of the most-derived interface supported by the target object of this proxy. /// /// The asynchronous result object returned by begin_ice_id. /// The Slice type ID of the most-derived interface. public string end_ice_id(AsyncResult result) { var resultI = AsyncResultI.check(result, this, _ice_id_name); return ((OutgoingAsyncT)resultI.OutgoingAsync).getResult(resultI.wait()); } private void iceI_ice_id(Dictionary context, OutgoingAsyncCompletionCallback completed, bool synchronous) { getOutgoingAsync(completed).invoke(_ice_id_name, OperationMode.Nonmutating, FormatType.DefaultFormat, context, synchronous, read: (InputStream iss) => { return iss.readString(); }); } /// /// Invokes an operation dynamically. /// /// The name of the operation to invoke. /// The operation mode (normal or idempotent). /// The encoded in-parameters for the operation. /// The encoded out-paramaters and return value /// for the operation. The return value follows any out-parameters. /// The context dictionary for the invocation. /// If the operation completed successfully, the return value /// is true. If the operation raises a user exception, /// the return value is false; in this case, outEncaps /// contains the encoded user exception. If the operation raises a run-time exception, /// it throws it directly. public bool ice_invoke(string operation, OperationMode mode, byte[] inEncaps, out byte[] outEncaps, OptionalContext context = new OptionalContext()) { try { var result = iceI_ice_invokeAsync(operation, mode, inEncaps, context, null, CancellationToken.None, true).Result; outEncaps = result.outEncaps; return result.returnValue; } catch(AggregateException ex) { throw ex.InnerException; } } /// /// Invokes an operation dynamically. /// /// The name of the operation to invoke. /// The operation mode (normal or idempotent). /// The encoded in-parameters for the operation. /// The context dictionary for the invocation. /// Sent progress provider. /// A cancellation token that receives the cancellation requests. /// The task object representing the asynchronous operation. public Task ice_invokeAsync(string operation, OperationMode mode, byte[] inEncaps, OptionalContext context = new OptionalContext(), IProgress progress = null, CancellationToken cancel = new CancellationToken()) { return iceI_ice_invokeAsync(operation, mode, inEncaps, context, progress, cancel, false); } private Task iceI_ice_invokeAsync(string operation, OperationMode mode, byte[] inEncaps, OptionalContext context, IProgress progress, CancellationToken cancel, bool synchronous) { var completed = new InvokeTaskCompletionCallback(progress, cancel); iceI_ice_invoke(operation, mode, inEncaps, context, completed, synchronous); return completed.Task; } /// /// Invokes an operation dynamically. /// /// The name of the operation to invoke. /// The operation mode (normal or idempotent). /// The encoded in-parameters for the operation. /// A callback to be invoked when the invocation completes. /// Application-specific data to be stored in the result. /// An asynchronous result object. public AsyncResult begin_ice_invoke(string operation, OperationMode mode, byte[] inEncaps, AsyncCallback callback, object cookie) { return iceI_begin_ice_invoke(operation, mode, inEncaps, new OptionalContext(), callback, cookie, false); } /// /// Invokes an operation dynamically. /// /// The name of the operation to invoke. /// The operation mode (normal or idempotent). /// The encoded in-parameters for the operation. /// The context dictionary for the invocation. /// A callback to be invoked when the invocation completes. /// Application-specific data to be stored in the result. /// An asynchronous result object. public AsyncResult begin_ice_invoke(string operation, OperationMode mode, byte[] inEncaps, OptionalContext context, AsyncCallback callback, object cookie) { return iceI_begin_ice_invoke(operation, mode, inEncaps, context, callback, cookie, false); } /// /// Invokes an operation dynamically. /// /// The name of the operation to invoke. /// The operation mode (normal or idempotent). /// The encoded in-parameters for the operation. /// The context dictionary for the invocation. /// An asynchronous result object. public AsyncResult begin_ice_invoke(string operation, OperationMode mode, byte[] inEncaps, OptionalContext context = new OptionalContext()) { return iceI_begin_ice_invoke(operation, mode, inEncaps, context, null, null, false); } private const string _ice_invoke_name = "ice_invoke"; /// /// Completes a dynamic invocation. /// /// The encoded out parameters or user exception. /// The asynchronous result object returned by begin_ice_invoke. /// If the operation completed successfully, the return value /// is true. If the operation raises a user exception, /// the return value is false; in this case, outEncaps /// contains the encoded user exception. If the operation raises a run-time exception, /// it throws it directly. public bool end_ice_invoke(out byte[] outEncaps, AsyncResult result) { var resultI = AsyncResultI.check(result, this, _ice_invoke_name); var r = ((InvokeOutgoingAsyncT)resultI.OutgoingAsync).getResult(resultI.wait()); outEncaps = r.outEncaps; return r.returnValue; } private AsyncResult iceI_begin_ice_invoke(string operation, OperationMode mode, byte[] inEncaps, Dictionary context, AsyncCallback callback, object cookie, bool synchronous) { var completed = new InvokeAsyncResultCompletionCallback(this, _ice_invoke_name, cookie, callback); iceI_ice_invoke(operation, mode, inEncaps, context, completed, synchronous); return completed; } private void iceI_ice_invoke(string operation, OperationMode mode, byte[] inEncaps, Dictionary context, OutgoingAsyncCompletionCallback completed, bool synchronous) { getInvokeOutgoingAsync(completed).invoke(operation, mode, inEncaps, context, synchronous); } /// /// Returns the identity embedded in this proxy. /// The identity of the target object. /// public Identity ice_getIdentity() { return (Identity)_reference.getIdentity().Clone(); } /// /// Creates a new proxy that is identical to this proxy, except for the per-proxy context. /// The identity for the new proxy. /// The proxy with the new identity. /// public ObjectPrx ice_identity(Identity newIdentity) { if(newIdentity.name.Length == 0) { throw new IllegalIdentityException(); } if(newIdentity.Equals(_reference.getIdentity())) { return this; } else { var proxy = new ObjectPrxHelperBase(); proxy.setup(_reference.changeIdentity(newIdentity)); return proxy; } } /// /// Returns the per-proxy context for this proxy. /// /// The per-proxy context. If the proxy does not have a per-proxy (implicit) context, the return value /// is null. public Dictionary ice_getContext() { return new Dictionary(_reference.getContext()); } /// /// Creates a new proxy that is identical to this proxy, except for the per-proxy context. /// /// The context for the new proxy. /// The proxy with the new per-proxy context. public ObjectPrx ice_context(Dictionary newContext) { return newInstance(_reference.changeContext(newContext)); } /// /// Returns the facet for this proxy. /// /// The facet for this proxy. If the proxy uses the default facet, the return value is the /// empty string. public string ice_getFacet() { return _reference.getFacet(); } /// /// Creates a new proxy that is identical to this proxy, except for the facet. /// /// The facet for the new proxy. /// The proxy with the new facet. public ObjectPrx ice_facet(string newFacet) { if(newFacet == null) { newFacet = ""; } if(newFacet.Equals(_reference.getFacet())) { return this; } else { var proxy = new ObjectPrxHelperBase(); proxy.setup(_reference.changeFacet(newFacet)); return proxy; } } /// /// Returns the adapter ID for this proxy. /// /// The adapter ID. If the proxy does not have an adapter ID, the return value is the /// empty string. public string ice_getAdapterId() { return _reference.getAdapterId(); } /// /// Creates a new proxy that is identical to this proxy, except for the adapter ID. /// /// The adapter ID for the new proxy. /// The proxy with the new adapter ID. public ObjectPrx ice_adapterId(string newAdapterId) { if(newAdapterId == null) { newAdapterId = ""; } if(newAdapterId.Equals(_reference.getAdapterId())) { return this; } else { return newInstance(_reference.changeAdapterId(newAdapterId)); } } /// /// Returns the endpoints used by this proxy. /// /// The endpoints used by this proxy. public Endpoint[] ice_getEndpoints() { return (Endpoint[])_reference.getEndpoints().Clone(); } /// /// Creates a new proxy that is identical to this proxy, except for the endpoints. /// /// The endpoints for the new proxy. /// The proxy with the new endpoints. public ObjectPrx ice_endpoints(Endpoint[] newEndpoints) { if(Arrays.Equals(newEndpoints, _reference.getEndpoints())) { return this; } else { var endpts = new EndpointI[newEndpoints.Length]; for(int i = 0; i < newEndpoints.Length; ++i) { endpts[i] = (EndpointI)newEndpoints[i]; } return newInstance(_reference.changeEndpoints(endpts)); } } /// /// Returns the locator cache timeout of this proxy. /// /// The locator cache timeout value (in seconds). public int ice_getLocatorCacheTimeout() { return _reference.getLocatorCacheTimeout(); } /// /// Creates a new proxy that is identical to this proxy, except for the locator cache timeout. /// /// The new locator cache timeout (in seconds). public ObjectPrx ice_locatorCacheTimeout(int newTimeout) { if(newTimeout < -1) { throw new ArgumentException("invalid value passed to ice_locatorCacheTimeout: " + newTimeout); } if(newTimeout == _reference.getLocatorCacheTimeout()) { return this; } else { return newInstance(_reference.changeLocatorCacheTimeout(newTimeout)); } } /// /// Returns the invocation timeout of this proxy. /// /// The invocation timeout value (in seconds). public int ice_getInvocationTimeout() { return _reference.getInvocationTimeout(); } /// /// Creates a new proxy that is identical to this proxy, except for the invocation timeout. /// /// The new invocation timeout (in seconds). public ObjectPrx ice_invocationTimeout(int newTimeout) { if(newTimeout < 1 && newTimeout != -1 && newTimeout != -2) { throw new ArgumentException("invalid value passed to ice_invocationTimeout: " + newTimeout); } if(newTimeout == _reference.getInvocationTimeout()) { return this; } else { return newInstance(_reference.changeInvocationTimeout(newTimeout)); } } /// /// Returns whether this proxy caches connections. /// /// True if this proxy caches connections; false, otherwise. public bool ice_isConnectionCached() { return _reference.getCacheConnection(); } /// /// Creates a new proxy that is identical to this proxy, except for connection caching. /// /// True if the new proxy should cache connections; false, otherwise. /// The new proxy with the specified caching policy. public ObjectPrx ice_connectionCached(bool newCache) { if(newCache == _reference.getCacheConnection()) { return this; } else { return newInstance(_reference.changeCacheConnection(newCache)); } } /// /// Returns how this proxy selects endpoints (randomly or ordered). /// /// The endpoint selection policy. public EndpointSelectionType ice_getEndpointSelection() { return _reference.getEndpointSelection(); } /// /// Creates a new proxy that is identical to this proxy, except for the endpoint selection policy. /// /// The new endpoint selection policy. /// The new proxy with the specified endpoint selection policy. public ObjectPrx ice_endpointSelection(EndpointSelectionType newType) { if(newType == _reference.getEndpointSelection()) { return this; } else { return newInstance(_reference.changeEndpointSelection(newType)); } } /// /// Returns whether this proxy communicates only via secure endpoints. /// /// True if this proxy communicates only vi secure endpoints; false, otherwise. public bool ice_isSecure() { return _reference.getSecure(); } /// /// Creates a new proxy that is identical to this proxy, except for how it selects endpoints. /// /// If b is true, only endpoints that use a secure transport are /// used by the new proxy. If b is false, the returned proxy uses both secure and insecure /// endpoints. /// The new proxy with the specified selection policy. public ObjectPrx ice_secure(bool b) { if(b == _reference.getSecure()) { return this; } else { return newInstance(_reference.changeSecure(b)); } } /// /// Creates a new proxy that is identical to this proxy, except for the encoding used to marshal /// parameters. /// /// The encoding version to use to marshal requests parameters. /// The new proxy with the specified encoding version. public ObjectPrx ice_encodingVersion(EncodingVersion e) { if(e.Equals(_reference.getEncoding())) { return this; } else { return newInstance(_reference.changeEncoding(e)); } } /// Returns the encoding version used to marshal requests parameters. /// The encoding version. public EncodingVersion ice_getEncodingVersion() { return _reference.getEncoding(); } /// /// Returns whether this proxy prefers secure endpoints. /// /// True if the proxy always attempts to invoke via secure endpoints before it /// attempts to use insecure endpoints; false, otherwise. public bool ice_isPreferSecure() { return _reference.getPreferSecure(); } /// /// Creates a new proxy that is identical to this proxy, except for its endpoint selection policy. /// /// If b is true, the new proxy will use secure endpoints for invocations /// and only use insecure endpoints if an invocation cannot be made via secure endpoints. If b is /// false, the proxy prefers insecure endpoints to secure ones. /// The new proxy with the new endpoint selection policy. public ObjectPrx ice_preferSecure(bool b) { if(b == _reference.getPreferSecure()) { return this; } else { return newInstance(_reference.changePreferSecure(b)); } } /// /// Returns the router for this proxy. /// /// The router for the proxy. If no router is configured for the proxy, the return value /// is null. public RouterPrx ice_getRouter() { RouterInfo ri = _reference.getRouterInfo(); return ri != null ? ri.getRouter() : null; } /// /// Creates a new proxy that is identical to this proxy, except for the router. /// /// The router for the new proxy. /// The new proxy with the specified router. public ObjectPrx ice_router(RouterPrx router) { Reference @ref = _reference.changeRouter(router); if(@ref.Equals(_reference)) { return this; } else { return newInstance(@ref); } } /// /// Returns the locator for this proxy. /// /// The locator for this proxy. If no locator is configured, the return value is null. public LocatorPrx ice_getLocator() { var li = _reference.getLocatorInfo(); return li != null ? li.getLocator() : null; } /// /// Creates a new proxy that is identical to this proxy, except for the locator. /// /// The locator for the new proxy. /// The new proxy with the specified locator. public ObjectPrx ice_locator(LocatorPrx locator) { var @ref = _reference.changeLocator(locator); if(@ref.Equals(_reference)) { return this; } else { return newInstance(@ref); } } /// /// Returns whether this proxy uses collocation optimization. /// /// True if the proxy uses collocation optimization; false, otherwise. public bool ice_isCollocationOptimized() { return _reference.getCollocationOptimized(); } /// /// Creates a new proxy that is identical to this proxy, except for collocation optimization. /// /// True if the new proxy enables collocation optimization; false, otherwise. /// The new proxy the specified collocation optimization. public ObjectPrx ice_collocationOptimized(bool b) { if(b == _reference.getCollocationOptimized()) { return this; } else { return newInstance(_reference.changeCollocationOptimized(b)); } } /// /// Creates a new proxy that is identical to this proxy, but uses twoway invocations. /// /// A new proxy that uses twoway invocations. public ObjectPrx ice_twoway() { if(_reference.getMode() == Reference.Mode.ModeTwoway) { return this; } else { return newInstance(_reference.changeMode(Reference.Mode.ModeTwoway)); } } /// /// Returns whether this proxy uses twoway invocations. /// /// True if this proxy uses twoway invocations; false, otherwise. public bool ice_isTwoway() { return _reference.getMode() == Reference.Mode.ModeTwoway; } /// /// Creates a new proxy that is identical to this proxy, but uses oneway invocations. /// /// A new proxy that uses oneway invocations. public ObjectPrx ice_oneway() { if(_reference.getMode() == Reference.Mode.ModeOneway) { return this; } else { return newInstance(_reference.changeMode(Reference.Mode.ModeOneway)); } } /// /// Returns whether this proxy uses oneway invocations. /// /// True if this proxy uses oneway invocations; false, otherwise. public bool ice_isOneway() { return _reference.getMode() == Reference.Mode.ModeOneway; } /// /// Creates a new proxy that is identical to this proxy, but uses batch oneway invocations. /// /// A new proxy that uses batch oneway invocations. public ObjectPrx ice_batchOneway() { if(_reference.getMode() == Reference.Mode.ModeBatchOneway) { return this; } else { return newInstance(_reference.changeMode(Reference.Mode.ModeBatchOneway)); } } /// /// Returns whether this proxy uses batch oneway invocations. /// /// True if this proxy uses batch oneway invocations; false, otherwise. public bool ice_isBatchOneway() { return _reference.getMode() == Reference.Mode.ModeBatchOneway; } /// /// Creates a new proxy that is identical to this proxy, but uses datagram invocations. /// /// A new proxy that uses datagram invocations. public ObjectPrx ice_datagram() { if(_reference.getMode() == Reference.Mode.ModeDatagram) { return this; } else { return newInstance(_reference.changeMode(Reference.Mode.ModeDatagram)); } } /// /// Returns whether this proxy uses datagram invocations. /// /// True if this proxy uses datagram invocations; false, otherwise. public bool ice_isDatagram() { return _reference.getMode() == Reference.Mode.ModeDatagram; } /// /// Creates a new proxy that is identical to this proxy, but uses batch datagram invocations. /// /// A new proxy that uses batch datagram invocations. public ObjectPrx ice_batchDatagram() { if(_reference.getMode() == Reference.Mode.ModeBatchDatagram) { return this; } else { return newInstance(_reference.changeMode(Reference.Mode.ModeBatchDatagram)); } } /// /// Returns whether this proxy uses batch datagram invocations. /// /// True if this proxy uses batch datagram invocations; false, otherwise. public bool ice_isBatchDatagram() { return _reference.getMode() == Reference.Mode.ModeBatchDatagram; } /// /// Creates a new proxy that is identical to this proxy, except for compression. /// /// True enables compression for the new proxy; false disables compression. /// A new proxy with the specified compression setting. public ObjectPrx ice_compress(bool co) { var @ref = _reference.changeCompress(co); if(@ref.Equals(_reference)) { return this; } else { return newInstance(@ref); } } /// /// Obtains the compression override setting of this proxy. /// /// The compression override setting. If no optional value is present, no override is /// set. Otherwise, true if compression is enabled, false otherwise. public Ice.Optional ice_getCompress() { return _reference.getCompress(); } /// /// Creates a new proxy that is identical to this proxy, except for its timeout setting. /// /// The timeout for the new proxy in milliseconds. /// A new proxy with the specified timeout. public ObjectPrx ice_timeout(int t) { if(t < 1 && t != -1) { throw new ArgumentException("invalid value passed to ice_timeout: " + t); } var @ref = _reference.changeTimeout(t); if(@ref.Equals(_reference)) { return this; } else { return newInstance(@ref); } } /// /// Obtains the timeout override of this proxy. /// /// The timeout override. If no optional value is present, no override is set. Otherwise, /// returns the timeout override value. public Ice.Optional ice_getTimeout() { return _reference.getTimeout(); } /// /// Creates a new proxy that is identical to this proxy, except for its connection ID. /// /// The connection ID for the new proxy. An empty string removes the /// connection ID. /// A new proxy with the specified connection ID. public ObjectPrx ice_connectionId(string connectionId) { var @ref = _reference.changeConnectionId(connectionId); if(@ref.Equals(_reference)) { return this; } else { return newInstance(@ref); } } /// /// Returns the connection id of this proxy. /// /// The connection id. public string ice_getConnectionId() { return _reference.getConnectionId(); } /// /// Returns a proxy that is identical to this proxy, except it's a fixed proxy bound /// the given connection. /// /// The fixed proxy connection. /// A fixed proxy bound to the given connection. public ObjectPrx ice_fixed(Ice.Connection connection) { if(connection == null) { throw new ArgumentException("invalid null connection passed to ice_fixed"); } if(!(connection is Ice.ConnectionI)) { throw new ArgumentException("invalid connection passed to ice_fixed"); } var @ref = _reference.changeConnection((Ice.ConnectionI)connection); if(@ref.Equals(_reference)) { return this; } else { return newInstance(@ref); } } /// /// Returns whether this proxy is a fixed proxy. /// /// True if this is a fixed proxy, false otherwise. /// public bool ice_isFixed() { return _reference is IceInternal.FixedReference; } private class ProxyGetConnectionAsyncCallback : ProxyAsyncResultCompletionCallback { public ProxyGetConnectionAsyncCallback(ObjectPrxHelperBase proxy, string operation, object cookie, AsyncCallback cb) : base(proxy, operation, cookie, cb) { } protected override AsyncCallback getCompletedCallback() { return (AsyncResult result) => { try { result.throwLocalException(); if(responseCallback_ != null) { responseCallback_.Invoke(((ProxyGetConnection)OutgoingAsync).getConnection()); } } catch(Exception ex) { if(exceptionCallback_ != null) { exceptionCallback_.Invoke(ex); } } }; } } public class GetConnectionTaskCompletionCallback : TaskCompletionCallback { public GetConnectionTaskCompletionCallback(ObjectPrx proxy, IProgress progress = null, CancellationToken cancellationToken = new CancellationToken()) : base(progress, cancellationToken) { _proxy = proxy; } public override void handleInvokeResponse(bool ok, OutgoingAsyncBase og) { SetResult(((ProxyGetConnection)og).getConnection()); } private ObjectPrx _proxy; } /// /// Returns the Connection for this proxy. If the proxy does not yet have an established connection, /// it first attempts to create a connection. /// /// The Connection for this proxy. /// If the proxy uses collocation optimization and denotes a /// collocated object. public Connection ice_getConnection() { try { var completed = new GetConnectionTaskCompletionCallback(this); iceI_ice_getConnection(completed, true); return completed.Task.Result; } catch(AggregateException ex) { throw ex.InnerException; } } public Task ice_getConnectionAsync(IProgress progress = null, CancellationToken cancel = new CancellationToken()) { var completed = new GetConnectionTaskCompletionCallback(this, progress, cancel); iceI_ice_getConnection(completed, false); return completed.Task; } public AsyncResult begin_ice_getConnection() { var completed = new ProxyGetConnectionAsyncCallback(this, _ice_getConnection_name, null, null); iceI_ice_getConnection(completed, false); return completed; } private const string _ice_getConnection_name = "ice_getConnection"; public AsyncResult begin_ice_getConnection(AsyncCallback cb, object cookie) { var completed = new ProxyGetConnectionAsyncCallback(this, _ice_getConnection_name, cookie, cb); iceI_ice_getConnection(completed, false); return completed; } public Connection end_ice_getConnection(AsyncResult r) { var resultI = AsyncResultI.check(r, this, _ice_getConnection_name); resultI.wait(); return ((ProxyGetConnection)resultI.OutgoingAsync).getConnection(); } private void iceI_ice_getConnection(OutgoingAsyncCompletionCallback completed, bool synchronous) { var outgoing = new ProxyGetConnection(this, completed); try { outgoing.invoke(_ice_getConnection_name, synchronous); } catch(Exception ex) { outgoing.abort(ex); } } /// /// Returns the cached Connection for this proxy. If the proxy does not yet have an established /// connection, it does not attempt to create a connection. /// /// The cached Connection for this proxy (null if the proxy does not have /// an established connection). /// If the proxy uses collocation optimization and denotes a /// collocated object. public Connection ice_getCachedConnection() { RequestHandler handler; lock(this) { handler = _requestHandler; } if(handler != null) { try { return handler.getConnection(); } catch(LocalException) { } } return null; } private class ProxyFlushBatchRequestsAsyncCallback : AsyncResultCompletionCallback { public ProxyFlushBatchRequestsAsyncCallback(ObjectPrx proxy, string operation, object cookie, AsyncCallback callback) : base(proxy.ice_getCommunicator(), ((ObjectPrxHelperBase)proxy).iceReference().getInstance(), operation, cookie, callback) { _proxy = proxy; } public override ObjectPrx getProxy() { return _proxy; } protected override AsyncCallback getCompletedCallback() { return (AsyncResult result) => { try { result.throwLocalException(); } catch(Exception ex) { if(exceptionCallback_ != null) { exceptionCallback_.Invoke(ex); } } }; } private ObjectPrx _proxy; } /// /// Flushes any pending batched requests for this communicator. The call blocks until the flush is complete. /// public void ice_flushBatchRequests() { try { var completed = new FlushBatchTaskCompletionCallback(); iceI_ice_flushBatchRequests(completed, true); completed.Task.Wait(); } catch(AggregateException ex) { throw ex.InnerException; } } internal const string _ice_flushBatchRequests_name = "ice_flushBatchRequests"; public Task ice_flushBatchRequestsAsync(IProgress progress = null, CancellationToken cancel = new CancellationToken()) { var completed = new FlushBatchTaskCompletionCallback(progress, cancel); iceI_ice_flushBatchRequests(completed, false); return completed.Task; } public AsyncResult begin_ice_flushBatchRequests(AsyncCallback cb = null, object cookie = null) { var completed = new ProxyFlushBatchRequestsAsyncCallback(this, _ice_flushBatchRequests_name, cookie, cb); iceI_ice_flushBatchRequests(completed, false); return completed; } public void end_ice_flushBatchRequests(AsyncResult r) { var resultI = AsyncResultI.check(r, this, _ice_flushBatchRequests_name); resultI.wait(); } private void iceI_ice_flushBatchRequests(OutgoingAsyncCompletionCallback completed, bool synchronous) { var outgoing = new ProxyFlushBatchAsync(this, completed); try { outgoing.invoke(_ice_flushBatchRequests_name, synchronous); } catch(Exception ex) { outgoing.abort(ex); } } public System.Threading.Tasks.TaskScheduler ice_scheduler() { return _reference.getThreadPool(); } /// /// Returns whether this proxy equals the passed object. Two proxies are equal if they are equal in all /// respects, that is, if their object identity, endpoints timeout settings, and so on are all equal. /// /// The object to compare this proxy with. /// True if this proxy is equal to r; false, otherwise. public override bool Equals(object r) { var rhs = r as ObjectPrxHelperBase; return ReferenceEquals(rhs, null) ? false : _reference.Equals(rhs._reference); } /// /// Returns whether two proxies are equal. Two proxies are equal if they are equal in all /// respects, that is, if their object identity, endpoints timeout settings, and so on are all equal. /// /// A proxy to compare with the proxy rhs. /// A proxy to compare with the proxy lhs. /// True if the proxies are equal; false, otherwise. public static bool Equals(ObjectPrxHelperBase lhs, ObjectPrxHelperBase rhs) { return ReferenceEquals(lhs, null) ? ReferenceEquals(rhs, null) : lhs.Equals(rhs); } /// /// Returns whether two proxies are equal. Two proxies are equal if they are equal in all /// respects, that is, if their object identity, endpoints timeout settings, and so on are all equal. /// /// A proxy to compare with the proxy rhs. /// A proxy to compare with the proxy lhs. /// True if the proxies are equal; false, otherwise. public static bool operator==(ObjectPrxHelperBase lhs, ObjectPrxHelperBase rhs) { return Equals(lhs, rhs); } /// /// Returns whether two proxies are not equal. Two proxies are equal if they are equal in all /// respects, that is, if their object identity, endpoints timeout settings, and so on are all equal. /// /// A proxy to compare with the proxy rhs. /// A proxy to compare with the proxy lhs. /// True if the proxies are not equal; false, otherwise. public static bool operator!=(ObjectPrxHelperBase lhs, ObjectPrxHelperBase rhs) { return !Equals(lhs, rhs); } [EditorBrowsable(EditorBrowsableState.Never)] public void iceWrite(OutputStream os) { _reference.getIdentity().ice_writeMembers(os); _reference.streamWrite(os); } [EditorBrowsable(EditorBrowsableState.Never)] public Reference iceReference() { return _reference; } [EditorBrowsable(EditorBrowsableState.Never)] public void iceCopyFrom(ObjectPrx from) { lock(from) { var h = (ObjectPrxHelperBase)from; _reference = h._reference; _requestHandler = h._requestHandler; } } [EditorBrowsable(EditorBrowsableState.Never)] public int iceHandleException(Exception ex, RequestHandler handler, OperationMode mode, bool sent, ref int cnt) { iceUpdateRequestHandler(handler, null); // Clear the request handler // // We only retry local exception, system exceptions aren't retried. // // A CloseConnectionException indicates graceful server shutdown, and is therefore // always repeatable without violating "at-most-once". That's because by sending a // close connection message, the server guarantees that all outstanding requests // can safely be repeated. // // An ObjectNotExistException can always be retried as well without violating // "at-most-once" (see the implementation of the checkRetryAfterException method // of the ProxyFactory class for the reasons why it can be useful). // // If the request didn't get sent or if it's non-mutating or idempotent it can // also always be retried if the retry count isn't reached. // if(ex is LocalException && (!sent || mode == OperationMode.Nonmutating || mode == OperationMode.Idempotent || ex is CloseConnectionException || ex is ObjectNotExistException)) { try { return _reference.getInstance().proxyFactory().checkRetryAfterException((LocalException)ex, _reference, ref cnt); } catch(CommunicatorDestroyedException) { // // The communicator is already destroyed, so we cannot retry. // throw ex; } } else { throw ex; // Retry could break at-most-once semantics, don't retry. } } [EditorBrowsable(EditorBrowsableState.Never)] public void iceCheckTwowayOnly(string name) { // // No mutex lock necessary, there is nothing mutable in this // operation. // if(!ice_isTwoway()) { throw new TwowayOnlyException(name); } } [EditorBrowsable(EditorBrowsableState.Never)] public void iceCheckAsyncTwowayOnly(string name) { // // No mutex lock necessary, there is nothing mutable in this // operation. // if(!ice_isTwoway()) { throw new ArgumentException("`" + name + "' can only be called with a twoway proxy"); } } [EditorBrowsable(EditorBrowsableState.Never)] public RequestHandler iceGetRequestHandler() { if(_reference.getCacheConnection()) { lock(this) { if(_requestHandler != null) { return _requestHandler; } } } return _reference.getRequestHandler(this); } [EditorBrowsable(EditorBrowsableState.Never)] public BatchRequestQueue iceGetBatchRequestQueue() { lock(this) { if(_batchRequestQueue == null) { _batchRequestQueue = _reference.getBatchRequestQueue(); } return _batchRequestQueue; } } [EditorBrowsable(EditorBrowsableState.Never)] public RequestHandler iceSetRequestHandler(RequestHandler handler) { if(_reference.getCacheConnection()) { lock(this) { if(_requestHandler == null) { _requestHandler = handler; } return _requestHandler; } } return handler; } [EditorBrowsable(EditorBrowsableState.Never)] public void iceUpdateRequestHandler(RequestHandler previous, RequestHandler handler) { if(_reference.getCacheConnection() && previous != null) { lock(this) { if(_requestHandler != null && _requestHandler != handler) { // // Update the request handler only if "previous" is the same // as the current request handler. This is called after // connection binding by the connect request handler. We only // replace the request handler if the current handler is the // connect request handler. // _requestHandler = _requestHandler.update(previous, handler); } } } } protected OutgoingAsyncT getOutgoingAsync(OutgoingAsyncCompletionCallback completed) { bool haveEntry = false; InputStream iss = null; OutputStream os = null; if(_reference.getInstance().cacheMessageBuffers() > 0) { lock(this) { if(_streamCache != null && _streamCache.Count > 0) { haveEntry = true; iss = _streamCache.First.Value.iss; os = _streamCache.First.Value.os; _streamCache.RemoveFirst(); } } } if(!haveEntry) { return new OutgoingAsyncT(this, completed); } else { return new OutgoingAsyncT(this, completed, os, iss); } } private class InvokeOutgoingAsyncT : OutgoingAsync { public InvokeOutgoingAsyncT(ObjectPrxHelperBase prx, OutgoingAsyncCompletionCallback completionCallback, OutputStream os = null, InputStream iss = null) : base(prx, completionCallback, os, iss) { } public void invoke(string operation, OperationMode mode, byte[] inParams, Dictionary context, bool synchronous) { try { prepare(operation, mode, context); if(inParams == null || inParams.Length == 0) { os_.writeEmptyEncapsulation(encoding_); } else { os_.writeEncapsulation(inParams); } invoke(operation, synchronous); } catch(Exception ex) { abort(ex); } } public Object_Ice_invokeResult getResult(bool ok) { try { var ret = new Object_Ice_invokeResult(); EncodingVersion encoding; if(proxy_.iceReference().getMode() == Reference.Mode.ModeTwoway) { ret.outEncaps = is_.readEncapsulation(out encoding); } else { ret.outEncaps = null; } ret.returnValue = ok; return ret; } finally { cacheMessageBuffers(); } } } public class InvokeAsyncResultCompletionCallback : ProxyAsyncResultCompletionCallback { public InvokeAsyncResultCompletionCallback(ObjectPrxHelperBase proxy, string operation, object cookie, AsyncCallback callback) : base(proxy, operation, cookie, callback) { } override protected AsyncCallback getCompletedCallback() { return (AsyncResult r) => { Debug.Assert(r == this); try { Object_Ice_invokeResult result = ((InvokeOutgoingAsyncT)outgoing_).getResult(wait()); try { if(responseCallback_ != null) { responseCallback_.Invoke(result.returnValue, result.outEncaps); } } catch(Exception ex) { throw new AggregateException(ex); } } catch(Exception ex) { if(exceptionCallback_ != null) { exceptionCallback_.Invoke(ex); } } }; } }; private class InvokeTaskCompletionCallback : TaskCompletionCallback { public InvokeTaskCompletionCallback(IProgress progress, CancellationToken cancellationToken) : base(progress, cancellationToken) { } public override void handleInvokeSent(bool sentSynchronously, bool done, bool alreadySent, OutgoingAsyncBase og) { if(progress_ != null && !alreadySent) { progress_.Report(sentSynchronously); } if(done) { SetResult(new Object_Ice_invokeResult(true, null)); } } public override void handleInvokeResponse(bool ok, OutgoingAsyncBase og) { SetResult(((InvokeOutgoingAsyncT)og).getResult(ok)); } } private InvokeOutgoingAsyncT getInvokeOutgoingAsync(OutgoingAsyncCompletionCallback completed) { bool haveEntry = false; InputStream iss = null; OutputStream os = null; if(_reference.getInstance().cacheMessageBuffers() > 0) { lock(this) { if(_streamCache != null && _streamCache.Count > 0) { haveEntry = true; iss = _streamCache.First.Value.iss; os = _streamCache.First.Value.os; _streamCache.RemoveFirst(); } } } if(!haveEntry) { return new InvokeOutgoingAsyncT(this, completed); } else { return new InvokeOutgoingAsyncT(this, completed, os, iss); } } /// /// Only for internal use by OutgoingAsync /// /// /// [EditorBrowsable(EditorBrowsableState.Never)] public void cacheMessageBuffers(InputStream iss, OutputStream os) { lock(this) { if(_streamCache == null) { _streamCache = new LinkedList(); } StreamCacheEntry cacheEntry; cacheEntry.iss = iss; cacheEntry.os = os; _streamCache.AddLast(cacheEntry); } } /// /// Only for internal use by ProxyFactory /// /// [EditorBrowsable(EditorBrowsableState.Never)] public void setup(Reference @ref) { // // No need to synchronize, as this operation is only called // upon initial initialization. // Debug.Assert(_reference == null); Debug.Assert(_requestHandler == null); _reference = @ref; } private ObjectPrxHelperBase newInstance(Reference @ref) { var proxy = (ObjectPrxHelperBase)Activator.CreateInstance(GetType()); proxy.setup(@ref); return proxy; } private Reference _reference; private RequestHandler _requestHandler; private BatchRequestQueue _batchRequestQueue; private struct StreamCacheEntry { public InputStream iss; public OutputStream os; } private LinkedList _streamCache; } /// /// Base class for all proxy helpers. /// public class ObjectPrxHelper : ObjectPrxHelperBase { /// /// Casts a proxy to {@link ObjectPrx}. This call contacts /// the server and will throw an Ice run-time exception if the target /// object does not exist or the server cannot be reached. /// /// The proxy to cast to ObjectPrx. /// b. public static ObjectPrx checkedCast(ObjectPrx b) { return b; } /// /// Casts a proxy to {@link ObjectPrx}. This call contacts /// the server and throws an Ice run-time exception if the target /// object does not exist or the server cannot be reached. /// /// The proxy to cast to ObjectPrx. /// The Context map for the invocation. /// b. public static ObjectPrx checkedCast(ObjectPrx b, Dictionary ctx) { return b; } /// /// Creates a new proxy that is identical to the passed proxy, except /// for its facet. This call contacts /// the server and throws an Ice run-time exception if the target /// object does not exist, the specified facet does not exist, or the server cannot be reached. /// /// The proxy to cast to ObjectPrx. /// The facet for the new proxy. /// The new proxy with the specified facet. public static ObjectPrx checkedCast(ObjectPrx b, string f) { ObjectPrx d = null; if(b != null) { try { var bb = b.ice_facet(f); var ok = bb.ice_isA("::Ice::Object"); Debug.Assert(ok); ObjectPrxHelper h = new ObjectPrxHelper(); h.iceCopyFrom(bb); d = h; } catch(FacetNotExistException) { } } return d; } /// /// Creates a new proxy that is identical to the passed proxy, except /// for its facet. This call contacts /// the server and throws an Ice run-time exception if the target /// object does not exist, the specified facet does not exist, or the server cannot be reached. /// /// The proxy to cast to ObjectPrx. /// The facet for the new proxy. /// The Context map for the invocation. /// The new proxy with the specified facet. public static ObjectPrx checkedCast(ObjectPrx b, string f, Dictionary ctx) { ObjectPrx d = null; if(b != null) { try { var bb = b.ice_facet(f); var ok = bb.ice_isA("::Ice::Object", ctx); Debug.Assert(ok); ObjectPrxHelper h = new ObjectPrxHelper(); h.iceCopyFrom(bb); d = h; } catch(FacetNotExistException) { } } return d; } /// /// Casts a proxy to {@link ObjectPrx}. This call does /// not contact the server and always succeeds. /// /// The proxy to cast to ObjectPrx. /// b. public static ObjectPrx uncheckedCast(ObjectPrx b) { return b; } /// /// Creates a new proxy that is identical to the passed proxy, except /// for its facet. This call does not contact the server and always succeeds. /// /// The proxy to cast to ObjectPrx. /// The facet for the new proxy. /// The new proxy with the specified facet. public static ObjectPrx uncheckedCast(ObjectPrx b, string f) { ObjectPrx d = null; if(b != null) { var bb = b.ice_facet(f); var h = new ObjectPrxHelper(); h.iceCopyFrom(bb); d = h; } return d; } /// /// Returns the Slice type id of the interface or class associated /// with this proxy class. /// /// The type id, "::Ice::Object". public static string ice_staticId() { return ObjectImpl.ice_staticId(); } } }