[Modify] Polish it
More clearly received or not.
This commit is contained in:
parent
39add76329
commit
1f40f8e566
@ -132,8 +132,7 @@ namespace WebSocketSharp.Server
|
|||||||
var e = new CloseEventArgs (code, reason);
|
var e = new CloseEventArgs (code, reason);
|
||||||
var send = !code.IsReserved ();
|
var send = !code.IsReserved ();
|
||||||
var bytes = send ? WebSocketFrame.CreateCloseFrame (e.PayloadData, false).ToArray () : null;
|
var bytes = send ? WebSocketFrame.CreateCloseFrame (e.PayloadData, false).ToArray () : null;
|
||||||
var timeout = send ? WaitTime : TimeSpan.Zero;
|
Sessions.Stop (e, bytes, send);
|
||||||
Sessions.Stop (e, bytes, timeout);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -356,17 +356,14 @@ namespace WebSocketSharp.Server
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void Stop (CloseEventArgs e, bool send, bool wait)
|
internal void Stop (CloseEventArgs e, bool send, bool receive)
|
||||||
{
|
{
|
||||||
lock (_sync) {
|
lock (_sync) {
|
||||||
_state = ServerState.ShuttingDown;
|
_state = ServerState.ShuttingDown;
|
||||||
var bytes = send
|
|
||||||
? WebSocketFrame.CreateCloseFrame (e.PayloadData, false).ToArray ()
|
|
||||||
: null;
|
|
||||||
|
|
||||||
var timeout = wait ? _waitTime : TimeSpan.Zero;
|
var bytes = send ? WebSocketFrame.CreateCloseFrame (e.PayloadData, false).ToArray () : null;
|
||||||
foreach (var host in _hosts.Values)
|
foreach (var host in _hosts.Values)
|
||||||
host.Sessions.Stop (e, bytes, timeout);
|
host.Sessions.Stop (e, bytes, receive);
|
||||||
|
|
||||||
_hosts.Clear ();
|
_hosts.Clear ();
|
||||||
_state = ServerState.Stop;
|
_state = ServerState.Stop;
|
||||||
|
@ -368,14 +368,14 @@ namespace WebSocketSharp.Server
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void Stop (CloseEventArgs e, byte[] frameAsBytes, TimeSpan timeout)
|
internal void Stop (CloseEventArgs e, byte[] frameAsBytes, bool receive)
|
||||||
{
|
{
|
||||||
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 (e, frameAsBytes, timeout);
|
session.Context.WebSocket.Close (e, frameAsBytes, receive);
|
||||||
|
|
||||||
_state = ServerState.Stop;
|
_state = ServerState.Stop;
|
||||||
}
|
}
|
||||||
|
@ -738,7 +738,7 @@ namespace WebSocketSharp
|
|||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void close (CloseEventArgs e, bool send, bool wait)
|
private void close (CloseEventArgs e, bool send, bool receive, bool received)
|
||||||
{
|
{
|
||||||
lock (_forConn) {
|
lock (_forConn) {
|
||||||
if (_readyState == WebSocketState.Closing) {
|
if (_readyState == WebSocketState.Closing) {
|
||||||
@ -752,17 +752,15 @@ namespace WebSocketSharp
|
|||||||
}
|
}
|
||||||
|
|
||||||
send = send && _readyState == WebSocketState.Open;
|
send = send && _readyState == WebSocketState.Open;
|
||||||
wait = wait && send;
|
receive = receive && send;
|
||||||
|
|
||||||
_readyState = WebSocketState.Closing;
|
_readyState = WebSocketState.Closing;
|
||||||
}
|
}
|
||||||
|
|
||||||
_logger.Trace ("Begin closing the connection.");
|
_logger.Trace ("Begin closing the connection.");
|
||||||
|
|
||||||
e.WasClean = closeHandshake (
|
var bytes = send ? WebSocketFrame.CreateCloseFrame (e.PayloadData, _client).ToArray () : null;
|
||||||
send ? WebSocketFrame.CreateCloseFrame (e.PayloadData, _client).ToArray () : null,
|
e.WasClean = closeHandshake (bytes, receive, received);
|
||||||
wait ? _waitTime : TimeSpan.Zero,
|
|
||||||
_client ? (Action) releaseClientResources : releaseServerResources);
|
|
||||||
|
|
||||||
_logger.Trace ("End closing the connection.");
|
_logger.Trace ("End closing the connection.");
|
||||||
|
|
||||||
@ -776,19 +774,23 @@ namespace WebSocketSharp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void closeAsync (CloseEventArgs e, bool send, bool wait)
|
private void closeAsync (CloseEventArgs e, bool send, bool receive, bool received)
|
||||||
{
|
{
|
||||||
Action<CloseEventArgs, bool, bool> closer = close;
|
Action<CloseEventArgs, bool, bool, bool> closer = close;
|
||||||
closer.BeginInvoke (e, send, wait, ar => closer.EndInvoke (ar), null);
|
closer.BeginInvoke (e, send, receive, received, ar => closer.EndInvoke (ar), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool closeHandshake (byte[] frameAsBytes, TimeSpan timeout, Action release)
|
private bool closeHandshake (byte[] frameAsBytes, bool receive, bool received)
|
||||||
{
|
{
|
||||||
var sent = frameAsBytes != null && sendBytes (frameAsBytes);
|
var sent = frameAsBytes != null && sendBytes (frameAsBytes);
|
||||||
var received = timeout == TimeSpan.Zero ||
|
received = received ||
|
||||||
(sent && _exitReceiving != null && _exitReceiving.WaitOne (timeout));
|
(receive && sent && _exitReceiving != null && _exitReceiving.WaitOne (_waitTime));
|
||||||
|
|
||||||
|
if (_client)
|
||||||
|
releaseClientResources ();
|
||||||
|
else
|
||||||
|
releaseServerResources ();
|
||||||
|
|
||||||
release ();
|
|
||||||
if (_fragmentsBuffer != null) {
|
if (_fragmentsBuffer != null) {
|
||||||
_fragmentsBuffer.Dispose ();
|
_fragmentsBuffer.Dispose ();
|
||||||
_fragmentsBuffer = null;
|
_fragmentsBuffer = null;
|
||||||
@ -944,7 +946,7 @@ namespace WebSocketSharp
|
|||||||
|
|
||||||
msg = "An error has occurred while connecting.";
|
msg = "An error has occurred while connecting.";
|
||||||
error (msg, null);
|
error (msg, null);
|
||||||
close (new CloseEventArgs (CloseStatusCode.Abnormal, msg), false, false);
|
close (new CloseEventArgs (CloseStatusCode.Abnormal, msg), false, false, false);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1006,7 +1008,7 @@ namespace WebSocketSharp
|
|||||||
private bool processCloseFrame (WebSocketFrame frame)
|
private bool processCloseFrame (WebSocketFrame frame)
|
||||||
{
|
{
|
||||||
var payload = frame.PayloadData;
|
var payload = frame.PayloadData;
|
||||||
close (new CloseEventArgs (payload), !payload.IncludesReservedCloseStatusCode, false);
|
close (new CloseEventArgs (payload), !payload.IncludesReservedCloseStatusCode, false, true);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1043,7 +1045,8 @@ namespace WebSocketSharp
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
close (new CloseEventArgs (code, reason ?? code.GetMessage ()), !code.IsReserved (), false);
|
close (
|
||||||
|
new CloseEventArgs (code, reason ?? code.GetMessage ()), !code.IsReserved (), false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool processFragmentedFrame (WebSocketFrame frame)
|
private bool processFragmentedFrame (WebSocketFrame frame)
|
||||||
@ -1677,7 +1680,7 @@ namespace WebSocketSharp
|
|||||||
}
|
}
|
||||||
|
|
||||||
// As server
|
// As server
|
||||||
internal void Close (CloseEventArgs e, byte[] frameAsBytes, TimeSpan timeout)
|
internal void Close (CloseEventArgs e, byte[] frameAsBytes, bool receive)
|
||||||
{
|
{
|
||||||
lock (_forConn) {
|
lock (_forConn) {
|
||||||
if (_readyState == WebSocketState.Closing) {
|
if (_readyState == WebSocketState.Closing) {
|
||||||
@ -1693,7 +1696,7 @@ namespace WebSocketSharp
|
|||||||
_readyState = WebSocketState.Closing;
|
_readyState = WebSocketState.Closing;
|
||||||
}
|
}
|
||||||
|
|
||||||
e.WasClean = closeHandshake (frameAsBytes, timeout, releaseServerResources);
|
e.WasClean = closeHandshake (frameAsBytes, receive, false);
|
||||||
|
|
||||||
_readyState = WebSocketState.Closed;
|
_readyState = WebSocketState.Closed;
|
||||||
try {
|
try {
|
||||||
@ -1874,7 +1877,7 @@ namespace WebSocketSharp
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
close (new CloseEventArgs (), true, true);
|
close (new CloseEventArgs (), true, true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -1901,12 +1904,12 @@ namespace WebSocketSharp
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (code == (ushort) CloseStatusCode.NoStatus) {
|
if (code == (ushort) CloseStatusCode.NoStatus) {
|
||||||
close (new CloseEventArgs (), true, true);
|
close (new CloseEventArgs (), true, true, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var send = !code.IsReserved ();
|
var send = !code.IsReserved ();
|
||||||
close (new CloseEventArgs (code), send, send);
|
close (new CloseEventArgs (code), send, send, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -1930,12 +1933,12 @@ namespace WebSocketSharp
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (code == CloseStatusCode.NoStatus) {
|
if (code == CloseStatusCode.NoStatus) {
|
||||||
close (new CloseEventArgs (), true, true);
|
close (new CloseEventArgs (), true, true, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var send = !code.IsReserved ();
|
var send = !code.IsReserved ();
|
||||||
close (new CloseEventArgs (code), send, send);
|
close (new CloseEventArgs (code), send, send, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -1966,12 +1969,12 @@ namespace WebSocketSharp
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (code == (ushort) CloseStatusCode.NoStatus) {
|
if (code == (ushort) CloseStatusCode.NoStatus) {
|
||||||
close (new CloseEventArgs (), true, true);
|
close (new CloseEventArgs (), true, true, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var send = !code.IsReserved ();
|
var send = !code.IsReserved ();
|
||||||
close (new CloseEventArgs (code, reason), send, send);
|
close (new CloseEventArgs (code, reason), send, send, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -2002,12 +2005,12 @@ namespace WebSocketSharp
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (code == CloseStatusCode.NoStatus) {
|
if (code == CloseStatusCode.NoStatus) {
|
||||||
close (new CloseEventArgs (), true, true);
|
close (new CloseEventArgs (), true, true, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var send = !code.IsReserved ();
|
var send = !code.IsReserved ();
|
||||||
close (new CloseEventArgs (code, reason), send, send);
|
close (new CloseEventArgs (code, reason), send, send, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -2026,7 +2029,7 @@ namespace WebSocketSharp
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
closeAsync (new CloseEventArgs (), true, true);
|
closeAsync (new CloseEventArgs (), true, true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -2058,12 +2061,12 @@ namespace WebSocketSharp
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (code == (ushort) CloseStatusCode.NoStatus) {
|
if (code == (ushort) CloseStatusCode.NoStatus) {
|
||||||
closeAsync (new CloseEventArgs (), true, true);
|
closeAsync (new CloseEventArgs (), true, true, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var send = !code.IsReserved ();
|
var send = !code.IsReserved ();
|
||||||
closeAsync (new CloseEventArgs (code), send, send);
|
closeAsync (new CloseEventArgs (code), send, send, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -2090,12 +2093,12 @@ namespace WebSocketSharp
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (code == CloseStatusCode.NoStatus) {
|
if (code == CloseStatusCode.NoStatus) {
|
||||||
closeAsync (new CloseEventArgs (), true, true);
|
closeAsync (new CloseEventArgs (), true, true, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var send = !code.IsReserved ();
|
var send = !code.IsReserved ();
|
||||||
closeAsync (new CloseEventArgs (code), send, send);
|
closeAsync (new CloseEventArgs (code), send, send, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -2131,12 +2134,12 @@ namespace WebSocketSharp
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (code == (ushort) CloseStatusCode.NoStatus) {
|
if (code == (ushort) CloseStatusCode.NoStatus) {
|
||||||
closeAsync (new CloseEventArgs (), true, true);
|
closeAsync (new CloseEventArgs (), true, true, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var send = !code.IsReserved ();
|
var send = !code.IsReserved ();
|
||||||
closeAsync (new CloseEventArgs (code, reason), send, send);
|
closeAsync (new CloseEventArgs (code, reason), send, send, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -2173,12 +2176,12 @@ namespace WebSocketSharp
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (code == CloseStatusCode.NoStatus) {
|
if (code == CloseStatusCode.NoStatus) {
|
||||||
closeAsync (new CloseEventArgs (), true, true);
|
closeAsync (new CloseEventArgs (), true, true, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var send = !code.IsReserved ();
|
var send = !code.IsReserved ();
|
||||||
closeAsync (new CloseEventArgs (code, reason), send, send);
|
closeAsync (new CloseEventArgs (code, reason), send, send, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -2631,7 +2634,7 @@ namespace WebSocketSharp
|
|||||||
/// </remarks>
|
/// </remarks>
|
||||||
void IDisposable.Dispose ()
|
void IDisposable.Dispose ()
|
||||||
{
|
{
|
||||||
close (new CloseEventArgs (CloseStatusCode.Away), true, true);
|
close (new CloseEventArgs (CloseStatusCode.Away), true, true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
Loading…
Reference in New Issue
Block a user