Skip to content

Commit 440a0c5

Browse files
committed
Some cleanup
1 parent 1aa06a2 commit 440a0c5

File tree

1 file changed

+19
-15
lines changed

1 file changed

+19
-15
lines changed

AngleSharp.Io/Dom/WebSocket.cs

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,9 @@ public class WebSocket : EventTarget, IDisposable
2525
const Int32 SendChunkSize = 1024;
2626

2727
readonly Url _url;
28-
readonly MemoryStream _buffered;
2928
readonly CancellationTokenSource _cts;
3029
readonly ClientWebSocket _ws;
3130

32-
String _protocol;
3331
WebSocketReadyState _state;
3432

3533
#endregion
@@ -86,9 +84,7 @@ public event DomEventHandler Closed
8684
public WebSocket(String url, params String[] protocols)
8785
{
8886
_url = new Url(url);
89-
_protocol = String.Empty;
9087
_state = WebSocketReadyState.Connecting;
91-
_buffered = new MemoryStream();
9288
_cts = new CancellationTokenSource();
9389

9490
if (_url.IsInvalid || _url.IsRelative)
@@ -141,7 +137,7 @@ public WebSocketReadyState ReadyState
141137
[DomName("bufferedAmount")]
142138
public Int64 Buffered
143139
{
144-
get { return _buffered.Length; }
140+
get { return 0; }
145141
}
146142

147143
/// <summary>
@@ -150,7 +146,7 @@ public Int64 Buffered
150146
[DomName("protocol")]
151147
public String Protocol
152148
{
153-
get { return _protocol; }
149+
get { return _ws.SubProtocol ?? String.Empty; }
154150
}
155151

156152
#endregion
@@ -164,7 +160,14 @@ public String Protocol
164160
[DomName("send")]
165161
public void Send(String data)
166162
{
167-
SendAsync(data).Wait();
163+
if (_state == WebSocketReadyState.Open)
164+
{
165+
SendAsync(data).Forget();
166+
}
167+
else if (_state != WebSocketReadyState.Connecting)
168+
{
169+
throw new Exception("WebSocket is already in CLOSING or CLOSED state.");
170+
}
168171
}
169172

170173
/// <summary>
@@ -173,9 +176,12 @@ public void Send(String data)
173176
[DomName("close")]
174177
public void Close()
175178
{
176-
_state = WebSocketReadyState.Closing;
177-
StopListen();
178-
OnDisconnected();
179+
if (_state != WebSocketReadyState.Closed && _state != WebSocketReadyState.Closing)
180+
{
181+
_state = WebSocketReadyState.Closing;
182+
StopListen();
183+
OnDisconnected();
184+
}
179185
}
180186

181187
void IDisposable.Dispose()
@@ -200,17 +206,14 @@ static Boolean IsValid(String protocol)
200206

201207
async Task SendAsync(String message)
202208
{
203-
if (_ws.State != WebSocketState.Open)
204-
throw new Exception("WebSocket is already in CLOSING or CLOSED state.");
205-
206209
var messageBuffer = Encoding.UTF8.GetBytes(message);
207210
var remainder = 0;
208211
var messagesCount = Math.DivRem(messageBuffer.Length, SendChunkSize, out remainder);
209212

210213
if (remainder > 0)
211214
messagesCount++;
212-
else
213-
remainder = SendChunkSize;
215+
216+
remainder = messageBuffer.Length;
214217

215218
for (var i = 0; i < messagesCount; i++)
216219
{
@@ -219,6 +222,7 @@ async Task SendAsync(String message)
219222
var count = lastMessage ? remainder : SendChunkSize;
220223
var segment = new ArraySegment<Byte>(messageBuffer, offset, count);
221224
await _ws.SendAsync(segment, WebSocketMessageType.Text, lastMessage, _cts.Token).ConfigureAwait(false);
225+
remainder -= SendChunkSize;
222226
}
223227
}
224228

0 commit comments

Comments
 (0)