diff options
author | Joe George <joe@zeroc.com> | 2015-12-23 14:48:40 -0500 |
---|---|---|
committer | Joe George <joe@zeroc.com> | 2015-12-24 10:01:11 -0500 |
commit | e84da5f580821cae8dab292e19cc1296c07a8ed5 (patch) | |
tree | 1e8783c55c7dccd5adda2b87b47b8a7c118a1147 /csharp/src | |
parent | Fixes related to EnableSharedFromThis (diff) | |
download | ice-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.cs | 22 | ||||
-rw-r--r-- | csharp/src/Glacier2/SessionHelper.cs | 22 | ||||
-rw-r--r-- | csharp/src/Ice/ConnectionI.cs | 36 |
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 |