Refactored WebSocketServiceHost.cs
This commit is contained in:
parent
b02cfe1819
commit
25c103d51e
@ -59,11 +59,21 @@ namespace WebSocketSharp.Server
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Internal Properties
|
||||||
|
|
||||||
|
internal ServerState State {
|
||||||
|
get {
|
||||||
|
return Sessions.State;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Public Properties
|
#region Public Properties
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets a value indicating whether the WebSocket service cleans up the inactive
|
/// Gets or sets a value indicating whether the WebSocket service cleans up
|
||||||
/// sessions periodically.
|
/// the inactive sessions periodically.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>
|
/// <value>
|
||||||
/// <c>true</c> if the service cleans up the inactive sessions periodically;
|
/// <c>true</c> if the service cleans up the inactive sessions periodically;
|
||||||
@ -99,11 +109,27 @@ namespace WebSocketSharp.Server
|
|||||||
|
|
||||||
#region Internal Methods
|
#region Internal Methods
|
||||||
|
|
||||||
|
internal void Start ()
|
||||||
|
{
|
||||||
|
Sessions.Start ();
|
||||||
|
}
|
||||||
|
|
||||||
internal void StartSession (WebSocketContext context)
|
internal void StartSession (WebSocketContext context)
|
||||||
{
|
{
|
||||||
CreateSession ().Start (context, Sessions);
|
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
|
#endregion
|
||||||
|
|
||||||
#region Protected Methods
|
#region Protected Methods
|
||||||
|
@ -276,7 +276,7 @@ namespace WebSocketSharp.Server
|
|||||||
host.KeepClean = false;
|
host.KeepClean = false;
|
||||||
|
|
||||||
if (_state == ServerState.Start)
|
if (_state == ServerState.Start)
|
||||||
host.Sessions.Start ();
|
host.Start ();
|
||||||
|
|
||||||
_hosts.Add (path, host);
|
_hosts.Add (path, host);
|
||||||
}
|
}
|
||||||
@ -309,9 +309,8 @@ namespace WebSocketSharp.Server
|
|||||||
_hosts.Remove (path);
|
_hosts.Remove (path);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (host.Sessions.State == ServerState.Start)
|
if (host.State == ServerState.Start)
|
||||||
host.Sessions.Stop (
|
host.Stop ((ushort) CloseStatusCode.Away, null);
|
||||||
((ushort) CloseStatusCode.Away).InternalToByteArray (ByteOrder.Big), true);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -320,7 +319,7 @@ namespace WebSocketSharp.Server
|
|||||||
{
|
{
|
||||||
lock (_sync) {
|
lock (_sync) {
|
||||||
foreach (var host in _hosts.Values)
|
foreach (var host in _hosts.Values)
|
||||||
host.Sessions.Start ();
|
host.Start ();
|
||||||
|
|
||||||
_state = ServerState.Start;
|
_state = ServerState.Start;
|
||||||
}
|
}
|
||||||
@ -332,13 +331,13 @@ namespace WebSocketSharp.Server
|
|||||||
_state = ServerState.ShuttingDown;
|
_state = ServerState.ShuttingDown;
|
||||||
|
|
||||||
var payload = new PayloadData (data);
|
var payload = new PayloadData (data);
|
||||||
var args = new CloseEventArgs (payload);
|
var e = new CloseEventArgs (payload);
|
||||||
var bytes = send
|
var bytes = send
|
||||||
? WebSocketFrame.CreateCloseFrame (Mask.Unmask, payload).ToByteArray ()
|
? WebSocketFrame.CreateCloseFrame (Mask.Unmask, payload).ToByteArray ()
|
||||||
: null;
|
: null;
|
||||||
|
|
||||||
foreach (var host in _hosts.Values)
|
foreach (var host in _hosts.Values)
|
||||||
host.Sessions.Stop (args, bytes);
|
host.Sessions.Stop (e, bytes);
|
||||||
|
|
||||||
_hosts.Clear ();
|
_hosts.Clear ();
|
||||||
_state = ServerState.Stop;
|
_state = ServerState.Stop;
|
||||||
|
@ -345,25 +345,14 @@ namespace WebSocketSharp.Server
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void Stop (byte[] data, bool send)
|
internal void Stop (CloseEventArgs e, byte[] frameAsBytes)
|
||||||
{
|
|
||||||
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)
|
|
||||||
{
|
{
|
||||||
lock (_sync) {
|
lock (_sync) {
|
||||||
_state = ServerState.ShuttingDown;
|
_state = ServerState.ShuttingDown;
|
||||||
|
|
||||||
_sweepTimer.Enabled = false;
|
_sweepTimer.Enabled = false;
|
||||||
foreach (var session in _sessions.Values.ToList ())
|
foreach (var session in _sessions.Values.ToList ())
|
||||||
session.Context.WebSocket.Close (args, frameAsBytes, 1000);
|
session.Context.WebSocket.Close (e, frameAsBytes, 1000);
|
||||||
|
|
||||||
_state = ServerState.Stop;
|
_state = ServerState.Stop;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user