Skip to content

Commit 1f40f8e

Browse files
committed
[Modify] Polish it
More clearly received or not.
1 parent 39add76 commit 1f40f8e

File tree

4 files changed

+46
-47
lines changed

4 files changed

+46
-47
lines changed

websocket-sharp/Server/WebSocketServiceHost.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,7 @@ internal void Stop (ushort code, string reason)
132132
var e = new CloseEventArgs (code, reason);
133133
var send = !code.IsReserved ();
134134
var bytes = send ? WebSocketFrame.CreateCloseFrame (e.PayloadData, false).ToArray () : null;
135-
var timeout = send ? WaitTime : TimeSpan.Zero;
136-
Sessions.Stop (e, bytes, timeout);
135+
Sessions.Stop (e, bytes, send);
137136
}
138137

139138
#endregion

websocket-sharp/Server/WebSocketServiceManager.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -356,17 +356,14 @@ internal void Start ()
356356
}
357357
}
358358

359-
internal void Stop (CloseEventArgs e, bool send, bool wait)
359+
internal void Stop (CloseEventArgs e, bool send, bool receive)
360360
{
361361
lock (_sync) {
362362
_state = ServerState.ShuttingDown;
363-
var bytes = send
364-
? WebSocketFrame.CreateCloseFrame (e.PayloadData, false).ToArray ()
365-
: null;
366363

367-
var timeout = wait ? _waitTime : TimeSpan.Zero;
364+
var bytes = send ? WebSocketFrame.CreateCloseFrame (e.PayloadData, false).ToArray () : null;
368365
foreach (var host in _hosts.Values)
369-
host.Sessions.Stop (e, bytes, timeout);
366+
host.Sessions.Stop (e, bytes, receive);
370367

371368
_hosts.Clear ();
372369
_state = ServerState.Stop;

websocket-sharp/Server/WebSocketSessionManager.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -368,14 +368,14 @@ internal void Start ()
368368
}
369369
}
370370

371-
internal void Stop (CloseEventArgs e, byte[] frameAsBytes, TimeSpan timeout)
371+
internal void Stop (CloseEventArgs e, byte[] frameAsBytes, bool receive)
372372
{
373373
lock (_sync) {
374374
_state = ServerState.ShuttingDown;
375375

376376
_sweepTimer.Enabled = false;
377377
foreach (var session in _sessions.Values.ToList ())
378-
session.Context.WebSocket.Close (e, frameAsBytes, timeout);
378+
session.Context.WebSocket.Close (e, frameAsBytes, receive);
379379

380380
_state = ServerState.Stop;
381381
}

websocket-sharp/WebSocket.cs

Lines changed: 40 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -738,7 +738,7 @@ private string checkIfValidReceivedFrame (WebSocketFrame frame)
738738
: null;
739739
}
740740

741-
private void close (CloseEventArgs e, bool send, bool wait)
741+
private void close (CloseEventArgs e, bool send, bool receive, bool received)
742742
{
743743
lock (_forConn) {
744744
if (_readyState == WebSocketState.Closing) {
@@ -752,17 +752,15 @@ private void close (CloseEventArgs e, bool send, bool wait)
752752
}
753753

754754
send = send && _readyState == WebSocketState.Open;
755-
wait = wait && send;
755+
receive = receive && send;
756756

757757
_readyState = WebSocketState.Closing;
758758
}
759759

760760
_logger.Trace ("Begin closing the connection.");
761761

762-
e.WasClean = closeHandshake (
763-
send ? WebSocketFrame.CreateCloseFrame (e.PayloadData, _client).ToArray () : null,
764-
wait ? _waitTime : TimeSpan.Zero,
765-
_client ? (Action) releaseClientResources : releaseServerResources);
762+
var bytes = send ? WebSocketFrame.CreateCloseFrame (e.PayloadData, _client).ToArray () : null;
763+
e.WasClean = closeHandshake (bytes, receive, received);
766764

767765
_logger.Trace ("End closing the connection.");
768766

@@ -776,19 +774,23 @@ private void close (CloseEventArgs e, bool send, bool wait)
776774
}
777775
}
778776

779-
private void closeAsync (CloseEventArgs e, bool send, bool wait)
777+
private void closeAsync (CloseEventArgs e, bool send, bool receive, bool received)
780778
{
781-
Action<CloseEventArgs, bool, bool> closer = close;
782-
closer.BeginInvoke (e, send, wait, ar => closer.EndInvoke (ar), null);
779+
Action<CloseEventArgs, bool, bool, bool> closer = close;
780+
closer.BeginInvoke (e, send, receive, received, ar => closer.EndInvoke (ar), null);
783781
}
784782

785-
private bool closeHandshake (byte[] frameAsBytes, TimeSpan timeout, Action release)
783+
private bool closeHandshake (byte[] frameAsBytes, bool receive, bool received)
786784
{
787785
var sent = frameAsBytes != null && sendBytes (frameAsBytes);
788-
var received = timeout == TimeSpan.Zero ||
789-
(sent && _exitReceiving != null && _exitReceiving.WaitOne (timeout));
786+
received = received ||
787+
(receive && sent && _exitReceiving != null && _exitReceiving.WaitOne (_waitTime));
788+
789+
if (_client)
790+
releaseClientResources ();
791+
else
792+
releaseServerResources ();
790793

791-
release ();
792794
if (_fragmentsBuffer != null) {
793795
_fragmentsBuffer.Dispose ();
794796
_fragmentsBuffer = null;
@@ -944,7 +946,7 @@ private bool doHandshake ()
944946

945947
msg = "An error has occurred while connecting.";
946948
error (msg, null);
947-
close (new CloseEventArgs (CloseStatusCode.Abnormal, msg), false, false);
949+
close (new CloseEventArgs (CloseStatusCode.Abnormal, msg), false, false, false);
948950

949951
return false;
950952
}
@@ -1006,7 +1008,7 @@ private void open ()
10061008
private bool processCloseFrame (WebSocketFrame frame)
10071009
{
10081010
var payload = frame.PayloadData;
1009-
close (new CloseEventArgs (payload), !payload.IncludesReservedCloseStatusCode, false);
1011+
close (new CloseEventArgs (payload), !payload.IncludesReservedCloseStatusCode, false, true);
10101012

10111013
return false;
10121014
}
@@ -1043,7 +1045,8 @@ private void processException (Exception exception, string message)
10431045
return;
10441046
}
10451047

1046-
close (new CloseEventArgs (code, reason ?? code.GetMessage ()), !code.IsReserved (), false);
1048+
close (
1049+
new CloseEventArgs (code, reason ?? code.GetMessage ()), !code.IsReserved (), false, false);
10471050
}
10481051

10491052
private bool processFragmentedFrame (WebSocketFrame frame)
@@ -1677,7 +1680,7 @@ internal void Close (HttpStatusCode code)
16771680
}
16781681

16791682
// As server
1680-
internal void Close (CloseEventArgs e, byte[] frameAsBytes, TimeSpan timeout)
1683+
internal void Close (CloseEventArgs e, byte[] frameAsBytes, bool receive)
16811684
{
16821685
lock (_forConn) {
16831686
if (_readyState == WebSocketState.Closing) {
@@ -1693,7 +1696,7 @@ internal void Close (CloseEventArgs e, byte[] frameAsBytes, TimeSpan timeout)
16931696
_readyState = WebSocketState.Closing;
16941697
}
16951698

1696-
e.WasClean = closeHandshake (frameAsBytes, timeout, releaseServerResources);
1699+
e.WasClean = closeHandshake (frameAsBytes, receive, false);
16971700

16981701
_readyState = WebSocketState.Closed;
16991702
try {
@@ -1874,7 +1877,7 @@ public void Close ()
18741877
return;
18751878
}
18761879

1877-
close (new CloseEventArgs (), true, true);
1880+
close (new CloseEventArgs (), true, true, false);
18781881
}
18791882

18801883
/// <summary>
@@ -1901,12 +1904,12 @@ public void Close (ushort code)
19011904
}
19021905

19031906
if (code == (ushort) CloseStatusCode.NoStatus) {
1904-
close (new CloseEventArgs (), true, true);
1907+
close (new CloseEventArgs (), true, true, false);
19051908
return;
19061909
}
19071910

19081911
var send = !code.IsReserved ();
1909-
close (new CloseEventArgs (code), send, send);
1912+
close (new CloseEventArgs (code), send, send, false);
19101913
}
19111914

19121915
/// <summary>
@@ -1930,12 +1933,12 @@ public void Close (CloseStatusCode code)
19301933
}
19311934

19321935
if (code == CloseStatusCode.NoStatus) {
1933-
close (new CloseEventArgs (), true, true);
1936+
close (new CloseEventArgs (), true, true, false);
19341937
return;
19351938
}
19361939

19371940
var send = !code.IsReserved ();
1938-
close (new CloseEventArgs (code), send, send);
1941+
close (new CloseEventArgs (code), send, send, false);
19391942
}
19401943

19411944
/// <summary>
@@ -1966,12 +1969,12 @@ public void Close (ushort code, string reason)
19661969
}
19671970

19681971
if (code == (ushort) CloseStatusCode.NoStatus) {
1969-
close (new CloseEventArgs (), true, true);
1972+
close (new CloseEventArgs (), true, true, false);
19701973
return;
19711974
}
19721975

19731976
var send = !code.IsReserved ();
1974-
close (new CloseEventArgs (code, reason), send, send);
1977+
close (new CloseEventArgs (code, reason), send, send, false);
19751978
}
19761979

19771980
/// <summary>
@@ -2002,12 +2005,12 @@ public void Close (CloseStatusCode code, string reason)
20022005
}
20032006

20042007
if (code == CloseStatusCode.NoStatus) {
2005-
close (new CloseEventArgs (), true, true);
2008+
close (new CloseEventArgs (), true, true, false);
20062009
return;
20072010
}
20082011

20092012
var send = !code.IsReserved ();
2010-
close (new CloseEventArgs (code, reason), send, send);
2013+
close (new CloseEventArgs (code, reason), send, send, false);
20112014
}
20122015

20132016
/// <summary>
@@ -2026,7 +2029,7 @@ public void CloseAsync ()
20262029
return;
20272030
}
20282031

2029-
closeAsync (new CloseEventArgs (), true, true);
2032+
closeAsync (new CloseEventArgs (), true, true, false);
20302033
}
20312034

20322035
/// <summary>
@@ -2058,12 +2061,12 @@ public void CloseAsync (ushort code)
20582061
}
20592062

20602063
if (code == (ushort) CloseStatusCode.NoStatus) {
2061-
closeAsync (new CloseEventArgs (), true, true);
2064+
closeAsync (new CloseEventArgs (), true, true, false);
20622065
return;
20632066
}
20642067

20652068
var send = !code.IsReserved ();
2066-
closeAsync (new CloseEventArgs (code), send, send);
2069+
closeAsync (new CloseEventArgs (code), send, send, false);
20672070
}
20682071

20692072
/// <summary>
@@ -2090,12 +2093,12 @@ public void CloseAsync (CloseStatusCode code)
20902093
}
20912094

20922095
if (code == CloseStatusCode.NoStatus) {
2093-
closeAsync (new CloseEventArgs (), true, true);
2096+
closeAsync (new CloseEventArgs (), true, true, false);
20942097
return;
20952098
}
20962099

20972100
var send = !code.IsReserved ();
2098-
closeAsync (new CloseEventArgs (code), send, send);
2101+
closeAsync (new CloseEventArgs (code), send, send, false);
20992102
}
21002103

21012104
/// <summary>
@@ -2131,12 +2134,12 @@ public void CloseAsync (ushort code, string reason)
21312134
}
21322135

21332136
if (code == (ushort) CloseStatusCode.NoStatus) {
2134-
closeAsync (new CloseEventArgs (), true, true);
2137+
closeAsync (new CloseEventArgs (), true, true, false);
21352138
return;
21362139
}
21372140

21382141
var send = !code.IsReserved ();
2139-
closeAsync (new CloseEventArgs (code, reason), send, send);
2142+
closeAsync (new CloseEventArgs (code, reason), send, send, false);
21402143
}
21412144

21422145
/// <summary>
@@ -2173,12 +2176,12 @@ public void CloseAsync (CloseStatusCode code, string reason)
21732176
}
21742177

21752178
if (code == CloseStatusCode.NoStatus) {
2176-
closeAsync (new CloseEventArgs (), true, true);
2179+
closeAsync (new CloseEventArgs (), true, true, false);
21772180
return;
21782181
}
21792182

21802183
var send = !code.IsReserved ();
2181-
closeAsync (new CloseEventArgs (code, reason), send, send);
2184+
closeAsync (new CloseEventArgs (code, reason), send, send, false);
21822185
}
21832186

21842187
/// <summary>
@@ -2631,7 +2634,7 @@ public void SetProxy (string url, string username, string password)
26312634
/// </remarks>
26322635
void IDisposable.Dispose ()
26332636
{
2634-
close (new CloseEventArgs (CloseStatusCode.Away), true, true);
2637+
close (new CloseEventArgs (CloseStatusCode.Away), true, true, false);
26352638
}
26362639

26372640
#endregion

0 commit comments

Comments
 (0)