summaryrefslogtreecommitdiff
path: root/csharp/src
diff options
context:
space:
mode:
authorJoe George <joe@zeroc.com>2015-12-23 14:48:40 -0500
committerJoe George <joe@zeroc.com>2015-12-24 10:01:11 -0500
commite84da5f580821cae8dab292e19cc1296c07a8ed5 (patch)
tree1e8783c55c7dccd5adda2b87b47b8a7c118a1147 /csharp/src
parentFixes related to EnableSharedFromThis (diff)
downloadice-e84da5f580821cae8dab292e19cc1296c07a8ed5.tar.bz2
ice-e84da5f580821cae8dab292e19cc1296c07a8ed5.tar.xz
ice-e84da5f580821cae8dab292e19cc1296c07a8ed5.zip
ICE-6898 - "Delegate" functions for ACM callbacks
- Add delegate local interfaces CloseCallback and HeartbeatCallback and remove ConnectionCallback. - Replace setCallback by setCloseCallback and setHeartbeatCallback
Diffstat (limited to 'csharp/src')
-rw-r--r--csharp/src/Glacier2/Application.cs22
-rw-r--r--csharp/src/Glacier2/SessionHelper.cs22
-rw-r--r--csharp/src/Ice/ConnectionI.cs36
3 files changed, 26 insertions, 54 deletions
diff --git a/csharp/src/Glacier2/Application.cs b/csharp/src/Glacier2/Application.cs
index b5d4aa604c2..403aa13018d 100644
--- a/csharp/src/Glacier2/Application.cs
+++ b/csharp/src/Glacier2/Application.cs
@@ -205,26 +205,6 @@ public abstract class Application : Ice.Application
return _adapter;
}
- private class ConnectionCallbackI : Ice.ConnectionCallback
- {
- internal ConnectionCallbackI(Application application)
- {
- _application = application;
- }
-
- public void heartbeat(Ice.Connection con)
- {
-
- }
-
- public void closed(Ice.Connection con)
- {
- _application.sessionDestroyed();
- }
-
- private readonly Application _application;
- }
-
protected override int
doMain(string[] originArgs, Ice.InitializationData initData)
{
@@ -319,7 +299,7 @@ public abstract class Application : Ice.Application
Ice.Connection connection = _router.ice_getCachedConnection();
Debug.Assert(connection != null);
connection.setACM((int)acmTimeout, Ice.Util.None, Ice.ACMHeartbeat.HeartbeatAlways);
- connection.setCallback(new ConnectionCallbackI(this));
+ connection.setCloseCallback(_ => sessionDestroyed());
}
_category = _router.getCategoryForClient();
status = runWithSession(args);
diff --git a/csharp/src/Glacier2/SessionHelper.cs b/csharp/src/Glacier2/SessionHelper.cs
index ec7b026e2af..d4e55e26fe1 100644
--- a/csharp/src/Glacier2/SessionHelper.cs
+++ b/csharp/src/Glacier2/SessionHelper.cs
@@ -20,26 +20,6 @@ namespace Glacier2
/// </summary>
public class SessionHelper
{
- private class ConnectionCallbackI : Ice.ConnectionCallback
- {
- internal ConnectionCallbackI(SessionHelper sessionHelper)
- {
- _sessionHelper = sessionHelper;
- }
-
- public void heartbeat(Ice.Connection con)
- {
-
- }
-
- public void closed(Ice.Connection con)
- {
- _sessionHelper.destroy();
- }
-
- private readonly SessionHelper _sessionHelper;
- }
-
/// <summary>
/// Creates a Glacier2 session.
/// </summary>
@@ -320,7 +300,7 @@ public class SessionHelper
Ice.Connection connection = _router.ice_getCachedConnection();
Debug.Assert(connection != null);
connection.setACM(acmTimeout, Ice.Util.None, Ice.ACMHeartbeat.HeartbeatAlways);
- connection.setCallback(new ConnectionCallbackI(this));
+ connection.setCloseCallback(_ => destroy());
}
}
diff --git a/csharp/src/Ice/ConnectionI.cs b/csharp/src/Ice/ConnectionI.cs
index e8d355a08a1..5a32202f437 100644
--- a/csharp/src/Ice/ConnectionI.cs
+++ b/csharp/src/Ice/ConnectionI.cs
@@ -507,7 +507,7 @@ namespace Ice
return result;
}
- public void setCallback(ConnectionCallback callback)
+ public void setCloseCallback(CloseCallback callback)
{
lock(this)
{
@@ -519,7 +519,7 @@ namespace Ice
{
try
{
- callback.closed(this);
+ callback(this);
}
catch(System.Exception ex)
{
@@ -530,11 +530,19 @@ namespace Ice
}
else
{
- _callback = callback;
+ _closeCallback = callback;
}
}
}
+ public void setHeartbeatCallback(HeartbeatCallback callback)
+ {
+ lock(this)
+ {
+ _heartbeatCallback = callback;
+ }
+ }
+
public void setACM(Optional<int> timeout, Optional<ACMClose> close, Optional<ACMHeartbeat> heartbeat)
{
lock(this)
@@ -1249,7 +1257,7 @@ namespace Ice
{
try
{
- info.heartbeatCallback.heartbeat(this);
+ info.heartbeatCallback(this);
}
catch(System.Exception ex)
{
@@ -1324,7 +1332,8 @@ namespace Ice
// to call code that will potentially block (this avoids promoting a new leader and
// unecessary thread creation, especially if this is called on shutdown).
//
- if(_startCallback == null && _sendStreams.Count == 0 && _asyncRequests.Count == 0 && _callback == null)
+ if(_startCallback == null && _sendStreams.Count == 0 && _asyncRequests.Count == 0 &&
+ _closeCallback == null && _heartbeatCallback == null)
{
finish();
return;
@@ -1453,19 +1462,21 @@ namespace Ice
_readStream.getBuffer().clear();
_incomingCache = null;
- if(_callback != null)
+ if(_closeCallback != null)
{
try
{
- _callback.closed(this);
+ _closeCallback(this);
}
catch(System.Exception ex)
{
_logger.error("connection callback exception:\n" + ex + '\n' + _desc);
}
- _callback = null;
+ _closeCallback = null;
}
+ _heartbeatCallback = null;
+
//
// This must be done last as this will cause waitUntilFinished() to return (and communicator
// objects such as the timer might be destroyed too).
@@ -2353,7 +2364,7 @@ namespace Ice
public ObjectAdapter adapter;
public IceInternal.OutgoingAsyncBase outAsync;
public Ice.AsyncCallback completedCallback;
- public ConnectionCallback heartbeatCallback;
+ public HeartbeatCallback heartbeatCallback;
public int messageDispatchCount;
}
@@ -2511,9 +2522,9 @@ namespace Ice
case IceInternal.Protocol.validateConnectionMsg:
{
IceInternal.TraceUtil.traceRecv(info.stream, _logger, _traceLevels);
- if(_callback != null)
+ if(_heartbeatCallback != null)
{
- info.heartbeatCallback = _callback;
+ info.heartbeatCallback = _heartbeatCallback;
++info.messageDispatchCount;
}
break;
@@ -2986,7 +2997,8 @@ namespace Ice
private Ice.ConnectionInfo _info;
- private Ice.ConnectionCallback _callback;
+ private Ice.CloseCallback _closeCallback;
+ private Ice.HeartbeatCallback _heartbeatCallback;
private static ConnectionState[] connectionStateMap = new ConnectionState[] {
ConnectionState.ConnectionStateValidating, // StateNotInitialized