From ae6c41c64c31f1a820649999468a8db3729056e5 Mon Sep 17 00:00:00 2001 From: sta Date: Sat, 27 Sep 2014 14:42:39 +0900 Subject: [PATCH] Fix for issue #76, added the WaitTime property to the WebSocketServer class --- websocket-sharp/Ext.cs | 7 +++ websocket-sharp/Server/WebSocketServer.cs | 23 ++++++++++ .../Server/WebSocketServiceHost.cs | 37 +++++++++++----- .../Server/WebSocketServiceManager.cs | 44 ++++++++++--------- .../Server/WebSocketSessionManager.cs | 36 ++++++++------- 5 files changed, 101 insertions(+), 46 deletions(-) diff --git a/websocket-sharp/Ext.cs b/websocket-sharp/Ext.cs index 6052484b..2c06a8ab 100644 --- a/websocket-sharp/Ext.cs +++ b/websocket-sharp/Ext.cs @@ -302,6 +302,13 @@ namespace WebSocketSharp : null; } + internal static string CheckIfValidWaitTime (this TimeSpan time) + { + return time <= TimeSpan.Zero + ? "A wait time is zero or less." + : null; + } + internal static void Close (this HttpListenerResponse response, HttpStatusCode code) { response.StatusCode = (int) code; diff --git a/websocket-sharp/Server/WebSocketServer.cs b/websocket-sharp/Server/WebSocketServer.cs index 6d3d83e5..73bcfe1c 100644 --- a/websocket-sharp/Server/WebSocketServer.cs +++ b/websocket-sharp/Server/WebSocketServer.cs @@ -481,6 +481,29 @@ namespace WebSocketSharp.Server } } + /// + /// Gets or sets the wait time for the response to the WebSocket Ping or Close. + /// + /// + /// A that represents the wait time. The default value is + /// the same as 1 second. + /// + public TimeSpan WaitTime { + get { + return _services.WaitTime; + } + + set { + var msg = _state.CheckIfStartable () ?? value.CheckIfValidWaitTime (); + if (msg != null) { + _logger.Error (msg); + return; + } + + _services.WaitTime = value; + } + } + /// /// Gets the access to the WebSocket services provided by the server. /// diff --git a/websocket-sharp/Server/WebSocketServiceHost.cs b/websocket-sharp/Server/WebSocketServiceHost.cs index 21407902..8034e841 100644 --- a/websocket-sharp/Server/WebSocketServiceHost.cs +++ b/websocket-sharp/Server/WebSocketServiceHost.cs @@ -67,16 +67,6 @@ namespace WebSocketSharp.Server } } - internal TimeSpan WaitTime { - get { - return Sessions.WaitTime; - } - - set { - Sessions.WaitTime = value; - } - } - #endregion #region Public Properties @@ -115,6 +105,15 @@ namespace WebSocketSharp.Server /// public abstract Type Type { get; } + /// + /// Gets or sets the wait time for the response to the WebSocket Ping or Close. + /// + /// + /// A that represents the wait time. The default value is + /// the same as 1 second. + /// + public abstract TimeSpan WaitTime { get; set; } + #endregion #region Internal Methods @@ -162,6 +161,7 @@ namespace WebSocketSharp.Server #region Private Fields private Func _initializer; + private Logger _logger; private string _path; private WebSocketSessionManager _sessions; @@ -173,6 +173,7 @@ namespace WebSocketSharp.Server { _path = path; _initializer = initializer; + _logger = logger; _sessions = new WebSocketSessionManager (logger); } @@ -208,6 +209,22 @@ namespace WebSocketSharp.Server } } + public override TimeSpan WaitTime { + get { + return _sessions.WaitTime; + } + + set { + var msg = _sessions.State.CheckIfStartable () ?? value.CheckIfValidWaitTime (); + if (msg != null) { + _logger.Error (msg); + return; + } + + _sessions.WaitTime = value; + } + } + #endregion #region Protected Methods diff --git a/websocket-sharp/Server/WebSocketServiceManager.cs b/websocket-sharp/Server/WebSocketServiceManager.cs index 949d9d69..1f4e541e 100644 --- a/websocket-sharp/Server/WebSocketServiceManager.cs +++ b/websocket-sharp/Server/WebSocketServiceManager.cs @@ -73,27 +73,6 @@ namespace WebSocketSharp.Server #endregion - #region Internal Properties - - internal TimeSpan WaitTime { - get { - return _waitTime; - } - - set { - lock (_sync) { - if (value == _waitTime) - return; - - _waitTime = value; - foreach (var host in _hosts.Values) - host.WaitTime = value; - } - } - } - - #endregion - #region Public Properties /// @@ -201,6 +180,29 @@ namespace WebSocketSharp.Server } } + /// + /// Gets the wait time for the response to the WebSocket Ping or Close. + /// + /// + /// A that represents the wait time. + /// + public TimeSpan WaitTime { + get { + return _waitTime; + } + + internal set { + lock (_sync) { + if (value == _waitTime) + return; + + _waitTime = value; + foreach (var host in _hosts.Values) + host.WaitTime = value; + } + } + } + #endregion #region Private Methods diff --git a/websocket-sharp/Server/WebSocketSessionManager.cs b/websocket-sharp/Server/WebSocketSessionManager.cs index 021857fe..7ebdd17f 100644 --- a/websocket-sharp/Server/WebSocketSessionManager.cs +++ b/websocket-sharp/Server/WebSocketSessionManager.cs @@ -86,21 +86,6 @@ namespace WebSocketSharp.Server } } - internal TimeSpan WaitTime { - get { - return _waitTime; - } - - set { - if (value == _waitTime) - return; - - _waitTime = value; - foreach (var session in Sessions) - session.Context.WebSocket.WaitTime = value; - } - } - #endregion #region Public Properties @@ -224,6 +209,27 @@ namespace WebSocketSharp.Server } } + /// + /// Gets the wait time for the response to the WebSocket Ping or Close. + /// + /// + /// A that represents the wait time. + /// + public TimeSpan WaitTime { + get { + return _waitTime; + } + + internal set { + if (value == _waitTime) + return; + + _waitTime = value; + foreach (var session in Sessions) + session.Context.WebSocket.WaitTime = value; + } + } + #endregion #region Private Methods