diff --git a/websocket-sharp/Server/WebSocketServiceHost.cs b/websocket-sharp/Server/WebSocketServiceHost.cs
index 57d9e6a6..7f7be746 100644
--- a/websocket-sharp/Server/WebSocketServiceHost.cs
+++ b/websocket-sharp/Server/WebSocketServiceHost.cs
@@ -59,11 +59,21 @@ namespace WebSocketSharp.Server
#endregion
+ #region Internal Properties
+
+ internal ServerState State {
+ get {
+ return Sessions.State;
+ }
+ }
+
+ #endregion
+
#region Public Properties
///
- /// Gets or sets a value indicating whether the WebSocket service cleans up the inactive
- /// sessions periodically.
+ /// Gets or sets a value indicating whether the WebSocket service cleans up
+ /// the inactive sessions periodically.
///
///
/// true if the service cleans up the inactive sessions periodically;
@@ -99,11 +109,27 @@ namespace WebSocketSharp.Server
#region Internal Methods
+ internal void Start ()
+ {
+ Sessions.Start ();
+ }
+
internal void StartSession (WebSocketContext context)
{
CreateSession ().Start (context, Sessions);
}
+ internal void Stop (ushort code, string reason)
+ {
+ var payload = new PayloadData (code.Append (reason));
+ var e = new CloseEventArgs (payload);
+ var bytes = !code.IsReserved ()
+ ? WebSocketFrame.CreateCloseFrame (Mask.Unmask, payload).ToByteArray ()
+ : null;
+
+ Sessions.Stop (e, bytes);
+ }
+
#endregion
#region Protected Methods
diff --git a/websocket-sharp/Server/WebSocketServiceManager.cs b/websocket-sharp/Server/WebSocketServiceManager.cs
index 4525c684..811d0b96 100644
--- a/websocket-sharp/Server/WebSocketServiceManager.cs
+++ b/websocket-sharp/Server/WebSocketServiceManager.cs
@@ -276,7 +276,7 @@ namespace WebSocketSharp.Server
host.KeepClean = false;
if (_state == ServerState.Start)
- host.Sessions.Start ();
+ host.Start ();
_hosts.Add (path, host);
}
@@ -309,9 +309,8 @@ namespace WebSocketSharp.Server
_hosts.Remove (path);
}
- if (host.Sessions.State == ServerState.Start)
- host.Sessions.Stop (
- ((ushort) CloseStatusCode.Away).InternalToByteArray (ByteOrder.Big), true);
+ if (host.State == ServerState.Start)
+ host.Stop ((ushort) CloseStatusCode.Away, null);
return true;
}
@@ -320,7 +319,7 @@ namespace WebSocketSharp.Server
{
lock (_sync) {
foreach (var host in _hosts.Values)
- host.Sessions.Start ();
+ host.Start ();
_state = ServerState.Start;
}
@@ -332,13 +331,13 @@ namespace WebSocketSharp.Server
_state = ServerState.ShuttingDown;
var payload = new PayloadData (data);
- var args = new CloseEventArgs (payload);
+ var e = new CloseEventArgs (payload);
var bytes = send
? WebSocketFrame.CreateCloseFrame (Mask.Unmask, payload).ToByteArray ()
: null;
foreach (var host in _hosts.Values)
- host.Sessions.Stop (args, bytes);
+ host.Sessions.Stop (e, bytes);
_hosts.Clear ();
_state = ServerState.Stop;
diff --git a/websocket-sharp/Server/WebSocketSessionManager.cs b/websocket-sharp/Server/WebSocketSessionManager.cs
index ce1f5dc9..9e8e3645 100644
--- a/websocket-sharp/Server/WebSocketSessionManager.cs
+++ b/websocket-sharp/Server/WebSocketSessionManager.cs
@@ -345,25 +345,14 @@ namespace WebSocketSharp.Server
}
}
- internal void Stop (byte[] data, bool send)
- {
- var payload = new PayloadData (data);
- var args = new CloseEventArgs (payload);
- var bytes = send
- ? WebSocketFrame.CreateCloseFrame (Mask.Unmask, payload).ToByteArray ()
- : null;
-
- Stop (args, bytes);
- }
-
- internal void Stop (CloseEventArgs args, byte[] frameAsBytes)
+ internal void Stop (CloseEventArgs e, byte[] frameAsBytes)
{
lock (_sync) {
_state = ServerState.ShuttingDown;
_sweepTimer.Enabled = false;
foreach (var session in _sessions.Values.ToList ())
- session.Context.WebSocket.Close (args, frameAsBytes, 1000);
+ session.Context.WebSocket.Close (e, frameAsBytes, 1000);
_state = ServerState.Stop;
}