summaryrefslogtreecommitdiff
path: root/csharp/src/Ice/ConnectionRequestHandler.cs
diff options
context:
space:
mode:
authorMatthew Newhook <matthew@zeroc.com>2015-03-21 15:35:40 -0230
committerMatthew Newhook <matthew@zeroc.com>2015-03-21 15:35:40 -0230
commit630a37d2fe66f24518299e705f958b571803c522 (patch)
tree969723791bdc4d73bb099c19d45554d0ca241ad9 /csharp/src/Ice/ConnectionRequestHandler.cs
parentFix some README.md markdown formatting (diff)
downloadice-630a37d2fe66f24518299e705f958b571803c522.tar.bz2
ice-630a37d2fe66f24518299e705f958b571803c522.tar.xz
ice-630a37d2fe66f24518299e705f958b571803c522.zip
py -> python
rb -> ruby objc -> objective-c cs -> csharp
Diffstat (limited to 'csharp/src/Ice/ConnectionRequestHandler.cs')
-rw-r--r--csharp/src/Ice/ConnectionRequestHandler.cs77
1 files changed, 77 insertions, 0 deletions
diff --git a/csharp/src/Ice/ConnectionRequestHandler.cs b/csharp/src/Ice/ConnectionRequestHandler.cs
new file mode 100644
index 00000000000..8ddcca74e02
--- /dev/null
+++ b/csharp/src/Ice/ConnectionRequestHandler.cs
@@ -0,0 +1,77 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+using System;
+using System.Diagnostics;
+using System.Collections.Generic;
+using Ice.Instrumentation;
+
+namespace IceInternal
+{
+ public class ConnectionRequestHandler : RequestHandler
+ {
+ public RequestHandler update(RequestHandler previousHandler, RequestHandler newHandler)
+ {
+ try
+ {
+ if(previousHandler == this)
+ {
+ return newHandler;
+ }
+ else if(previousHandler.getConnection() == _connection)
+ {
+ //
+ // If both request handlers point to the same connection, we also
+ // update the request handler. See bug ICE-5489 for reasons why
+ // this can be useful.
+ //
+ return newHandler;
+ }
+ }
+ catch(Ice.Exception)
+ {
+ // Ignore
+ }
+ return this;
+ }
+
+ public bool sendAsyncRequest(ProxyOutgoingAsyncBase outAsync, out Ice.AsyncCallback sentCallback)
+ {
+ return outAsync.invokeRemote(_connection, _compress, _response, out sentCallback);
+ }
+
+ public void asyncRequestCanceled(OutgoingAsyncBase outAsync, Ice.LocalException ex)
+ {
+ _connection.asyncRequestCanceled(outAsync, ex);
+ }
+
+ public Reference getReference()
+ {
+ return _reference;
+ }
+
+ public Ice.ConnectionI getConnection()
+ {
+ return _connection;
+ }
+
+ public ConnectionRequestHandler(Reference @ref, Ice.ConnectionI connection, bool compress)
+ {
+ _reference = @ref;
+ _response = _reference.getMode() == Reference.Mode.ModeTwoway;
+ _connection = connection;
+ _compress = compress;
+ }
+
+ private Reference _reference;
+ private bool _response;
+ private Ice.ConnectionI _connection;
+ private bool _compress;
+ }
+}