From b7313955c9a2a60237d74b48fba520bab9aabde1 Mon Sep 17 00:00:00 2001 From: sta Date: Thu, 5 Sep 2013 21:58:57 +0900 Subject: [PATCH] Modified closing --- websocket-sharp/Server/HttpServer.cs | 4 ++-- .../Server/IWebSocketServiceHost.cs | 11 ++++------- websocket-sharp/Server/WebSocketServer.cs | 2 +- websocket-sharp/Server/WebSocketService.cs | 5 +++++ websocket-sharp/Server/WebSocketServiceHost.cs | 16 ++++++---------- .../Server/WebSocketServiceHostManager.cs | 6 +++--- .../Server/WebSocketServiceManager.cs | 6 +++--- websocket-sharp/WebSocket.cs | 18 ++++++++++++------ 8 files changed, 36 insertions(+), 32 deletions(-) diff --git a/websocket-sharp/Server/HttpServer.cs b/websocket-sharp/Server/HttpServer.cs index bff346be..f62c1e5b 100644 --- a/websocket-sharp/Server/HttpServer.cs +++ b/websocket-sharp/Server/HttpServer.cs @@ -462,9 +462,9 @@ namespace WebSocketSharp.Server return; } + _serviceHosts.Stop (data); _listener.Close (); _receiveRequestThread.Join (5 * 1000); - _serviceHosts.Stop (code, reason); _listening = false; } @@ -579,9 +579,9 @@ namespace WebSocketSharp.Server if (!_listening) return; + _serviceHosts.Stop (); _listener.Close (); _receiveRequestThread.Join (5 * 1000); - _serviceHosts.Stop (); _listening = false; } diff --git a/websocket-sharp/Server/IWebSocketServiceHost.cs b/websocket-sharp/Server/IWebSocketServiceHost.cs index ad98dc00..85b8a206 100644 --- a/websocket-sharp/Server/IWebSocketServiceHost.cs +++ b/websocket-sharp/Server/IWebSocketServiceHost.cs @@ -201,14 +201,11 @@ namespace WebSocketSharp.Server void Stop (); /// - /// Stops the WebSocket service host with the specified and . + /// Stops the WebSocket service host with the specified array of . /// - /// - /// A that contains a status code indicating the reason for stop. - /// - /// - /// A that contains the reason for stop. + /// + /// An array of that contains the reason for stop. /// - void Stop (ushort code, string reason); + void Stop (byte [] data); } } diff --git a/websocket-sharp/Server/WebSocketServer.cs b/websocket-sharp/Server/WebSocketServer.cs index 2917ab04..0ea0cf94 100644 --- a/websocket-sharp/Server/WebSocketServer.cs +++ b/websocket-sharp/Server/WebSocketServer.cs @@ -207,7 +207,7 @@ namespace WebSocketSharp.Server } base.Stop (); - _serviceHosts.Stop (code, reason); + _serviceHosts.Stop (data); } #endregion diff --git a/websocket-sharp/Server/WebSocketService.cs b/websocket-sharp/Server/WebSocketService.cs index a380bf2a..3b0ea584 100644 --- a/websocket-sharp/Server/WebSocketService.cs +++ b/websocket-sharp/Server/WebSocketService.cs @@ -211,6 +211,11 @@ namespace WebSocketSharp.Server _websocket.SendAsync (data, completed); } + internal void Stop (byte [] data) + { + _websocket.Close (data); + } + #endregion #region Protected Methods diff --git a/websocket-sharp/Server/WebSocketServiceHost.cs b/websocket-sharp/Server/WebSocketServiceHost.cs index 818874c2..b4472494 100644 --- a/websocket-sharp/Server/WebSocketServiceHost.cs +++ b/websocket-sharp/Server/WebSocketServiceHost.cs @@ -280,7 +280,7 @@ namespace WebSocketSharp.Server } base.Stop (); - _sessions.Stop (code, reason); + _sessions.Stop (data); } #endregion @@ -765,19 +765,15 @@ namespace WebSocketSharp.Server } /// - /// Stops receiving the WebSocket connection requests with the specified and - /// . + /// Stops the WebSocket service host with the specified array of . /// - /// - /// A that contains a status code indicating the reason for stop. - /// - /// - /// A that contains the reason for stop. + /// + /// An array of that contains the reason for stop. /// - void IWebSocketServiceHost.Stop (ushort code, string reason) + void IWebSocketServiceHost.Stop (byte [] data) { base.Stop (); - _sessions.Stop (code, reason); + _sessions.Stop (data); } #endregion diff --git a/websocket-sharp/Server/WebSocketServiceHostManager.cs b/websocket-sharp/Server/WebSocketServiceHostManager.cs index 2bc238ff..4a622bb5 100644 --- a/websocket-sharp/Server/WebSocketServiceHostManager.cs +++ b/websocket-sharp/Server/WebSocketServiceHostManager.cs @@ -193,7 +193,7 @@ namespace WebSocketSharp.Server _serviceHosts.Remove (servicePath); } - host.Stop ((ushort) CloseStatusCode.AWAY, String.Empty); + host.Stop (((ushort) CloseStatusCode.AWAY).ToByteArray (ByteOrder.BIG)); return true; } @@ -208,12 +208,12 @@ namespace WebSocketSharp.Server } } - internal void Stop (ushort code, string reason) + internal void Stop (byte [] data) { lock (_sync) { foreach (var host in _serviceHosts.Values) - host.Stop (code, reason); + host.Stop (data); _serviceHosts.Clear (); } diff --git a/websocket-sharp/Server/WebSocketServiceManager.cs b/websocket-sharp/Server/WebSocketServiceManager.cs index cddd2932..4e17fe96 100644 --- a/websocket-sharp/Server/WebSocketServiceManager.cs +++ b/websocket-sharp/Server/WebSocketServiceManager.cs @@ -508,7 +508,7 @@ namespace WebSocketSharp.Server } } - internal void Stop (ushort code, string reason) + internal void Stop (byte [] data) { stopSweepTimer (); lock (_sync) @@ -518,7 +518,7 @@ namespace WebSocketSharp.Server _stopped = true; foreach (var service in copy ().Values) - service.Stop (code, reason); + service.Stop (data); } } @@ -588,7 +588,7 @@ namespace WebSocketSharp.Server { var state = service.WebSocket.ReadyState; if (state == WebSocketState.OPEN) - service.Stop (CloseStatusCode.ABNORMAL, String.Empty); + service.Stop (((ushort) CloseStatusCode.ABNORMAL).ToByteArray (ByteOrder.BIG)); else if (state == WebSocketState.CLOSING) continue; else diff --git a/websocket-sharp/WebSocket.cs b/websocket-sharp/WebSocket.cs index 3bc4ce6c..e4b843f0 100644 --- a/websocket-sharp/WebSocket.cs +++ b/websocket-sharp/WebSocket.cs @@ -586,9 +586,9 @@ namespace WebSocketSharp private void close (ushort code, string reason) { var data = code.Append (reason); - if (data.Length > 125) + var msg = data.CheckIfValidCloseData (); + if (msg != null) { - var msg = "The payload length of a Close frame must be 125 bytes or less."; _logger.Error (String.Format ("{0}\ncode: {1}\nreason: {2}", msg, code, reason)); error (msg); @@ -1314,6 +1314,12 @@ namespace WebSocketSharp #region Internal Methods + // As server + internal void Close (byte [] data) + { + close (new PayloadData (data)); + } + // As server internal void Close (HttpStatusCode code) { @@ -1346,7 +1352,7 @@ namespace WebSocketSharp /// public void Close (ushort code) { - Close (code, String.Empty); + Close (code, ""); } /// @@ -1358,7 +1364,7 @@ namespace WebSocketSharp /// public void Close (CloseStatusCode code) { - close ((ushort) code, String.Empty); + close (new PayloadData (((ushort) code).ToByteArray (ByteOrder.BIG))); } /// @@ -1377,9 +1383,9 @@ namespace WebSocketSharp /// public void Close (ushort code, string reason) { - if (!code.IsCloseStatusCode ()) + var msg = code.CheckIfValidCloseStatusCode (); + if (msg != null) { - var msg = "Invalid close status code."; _logger.Error (String.Format ("{0}\ncode: {1}", msg, code)); error (msg);