[Modify] Polish it

More clearly received or not.
This commit is contained in:
sta 2015-10-17 15:31:00 +09:00
parent 39add76329
commit 1f40f8e566
4 changed files with 46 additions and 47 deletions

View File

@ -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

View File

@ -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;

View File

@ -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;
} }

View File

@ -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