Skip to content

Commit e376d96

Browse files
committed
Updated to latest version and fixed cookie handling
1 parent ed84b51 commit e376d96

File tree

7 files changed

+85
-48
lines changed

7 files changed

+85
-48
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# 0.3.2
2+
3+
- Updated to latest version
4+
- Dispose WebSocket on unload
5+
16
# 0.3.1
27

38
- Adjusted to service changes

src/AngleSharp.Io/AngleSharp.Io.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@
3333
<DocumentationFile>bin\Release\AngleSharp.Io.xml</DocumentationFile>
3434
</PropertyGroup>
3535
<ItemGroup>
36-
<Reference Include="AngleSharp, Version=0.9.7.21214, Culture=neutral, PublicKeyToken=e83494dcdc6d31ea, processorArchitecture=MSIL">
37-
<HintPath>..\packages\AngleSharp.0.9.7\lib\net45\AngleSharp.dll</HintPath>
36+
<Reference Include="AngleSharp, Version=0.9.8.0, Culture=neutral, PublicKeyToken=e83494dcdc6d31ea, processorArchitecture=MSIL">
37+
<HintPath>..\packages\AngleSharp.0.9.8\lib\net45\AngleSharp.dll</HintPath>
3838
<Private>True</Private>
3939
</Reference>
4040
<Reference Include="System" />

src/AngleSharp.Io/Dom/WebSocket.cs

Lines changed: 59 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using AngleSharp.Attributes;
44
using AngleSharp.Dom;
55
using AngleSharp.Dom.Events;
6+
using AngleSharp.Html;
67
using AngleSharp.Io.Extensions;
78
using System;
89
using System.Linq;
@@ -20,24 +21,29 @@ public class WebSocket : EventTarget, IDisposable
2021
{
2122
#region Fields
2223

23-
const Int32 ReceiveChunkSize = 2048;
24-
const Int32 SendChunkSize = 1024;
24+
private const Int32 ReceiveChunkSize = 2048;
25+
private const Int32 SendChunkSize = 1024;
2526

26-
readonly Url _url;
27-
readonly CancellationTokenSource _cts;
28-
readonly ClientWebSocket _ws;
29-
readonly IWindow _window;
27+
private readonly Url _url;
28+
private readonly CancellationTokenSource _cts;
29+
private readonly ClientWebSocket _ws;
30+
private readonly IWindow _window;
3031

3132
WebSocketReadyState _state;
3233

3334
#endregion
3435

3536
#region Event Names
3637

37-
static readonly String OpenEvent = "open";
38-
static readonly String CloseEvent = "close";
39-
static readonly String MessageEvent = "message";
40-
static readonly String ErrorEvent = "error";
38+
/// <summary>
39+
/// The open event name.
40+
/// </summary>
41+
public static readonly String OpenEvent = "open";
42+
43+
/// <summary>
44+
/// The close event name.
45+
/// </summary>
46+
public static readonly String CloseEvent = "close";
4147

4248
#endregion
4349

@@ -59,8 +65,8 @@ public event DomEventHandler Opened
5965
[DomName("onmessage")]
6066
public event DomEventHandler Message
6167
{
62-
add { AddEventListener(MessageEvent, value, false); }
63-
remove { RemoveEventListener(MessageEvent, value, false); }
68+
add { AddEventListener(EventNames.Message, value, false); }
69+
remove { RemoveEventListener(EventNames.Message, value, false); }
6470
}
6571

6672
/// <summary>
@@ -69,8 +75,8 @@ public event DomEventHandler Message
6975
[DomName("onerror")]
7076
public event DomEventHandler Error
7177
{
72-
add { AddEventListener(ErrorEvent, value, false); }
73-
remove { RemoveEventListener(ErrorEvent, value, false); }
78+
add { AddEventListener(EventNames.Error, value, false); }
79+
remove { RemoveEventListener(EventNames.Error, value, false); }
7480
}
7581

7682
/// <summary>
@@ -122,22 +128,7 @@ public WebSocket(IWindow window, String url, params String[] protocols)
122128

123129
_ws.Options.KeepAliveInterval = TimeSpan.FromSeconds(20);
124130
ConnectAsync(url).Forget();
125-
}
126-
127-
async Task ConnectAsync(String url)
128-
{
129-
try
130-
{
131-
await _ws.ConnectAsync(new Uri(url), _cts.Token).ConfigureAwait(false);
132-
_state = WebSocketReadyState.Open;
133-
OnConnected();
134-
ListenAsync().Forget();
135-
}
136-
catch (Exception ex)
137-
{
138-
_state = WebSocketReadyState.Closed;
139-
OnError(ex);
140-
}
131+
_window.Unloaded += OnUnload;
141132
}
142133

143134
#endregion
@@ -225,7 +216,34 @@ void IDisposable.Dispose()
225216

226217
#region Helpers
227218

228-
static Boolean IsValid(String protocol)
219+
private async Task ConnectAsync(String url)
220+
{
221+
try
222+
{
223+
await _ws.ConnectAsync(new Uri(url), _cts.Token).ConfigureAwait(false);
224+
_state = WebSocketReadyState.Open;
225+
OnConnected();
226+
ListenAsync().Forget();
227+
}
228+
catch (Exception ex)
229+
{
230+
_state = WebSocketReadyState.Closed;
231+
OnError(ex);
232+
}
233+
}
234+
235+
private void OnUnload(Object sender, Event ev)
236+
{
237+
RemoveEventListeners();
238+
239+
if (_state != WebSocketReadyState.Closed && _state != WebSocketReadyState.Closing)
240+
{
241+
CloseAsync().Wait();
242+
_ws.Dispose();
243+
}
244+
}
245+
246+
private static Boolean IsValid(String protocol)
229247
{
230248
for (var i = 0; i < protocol.Length; i++)
231249
{
@@ -238,7 +256,7 @@ static Boolean IsValid(String protocol)
238256
return true;
239257
}
240258

241-
async Task SendAsync(String message)
259+
private async Task SendAsync(String message)
242260
{
243261
var messageBuffer = Encoding.UTF8.GetBytes(message);
244262
var remainder = 0;
@@ -262,15 +280,15 @@ async Task SendAsync(String message)
262280
}
263281
}
264282

265-
async Task CloseAsync()
283+
private async Task CloseAsync()
266284
{
267285
_state = WebSocketReadyState.Closing;
268286
await _ws.CloseAsync(WebSocketCloseStatus.NormalClosure, String.Empty, _cts.Token).ConfigureAwait(false);
269287
CancelListener();
270288
OnDisconnected();
271289
}
272290

273-
async Task ListenAsync()
291+
private async Task ListenAsync()
274292
{
275293
var buffer = new Byte[ReceiveChunkSize];
276294
var stringResult = new StringBuilder();
@@ -305,35 +323,35 @@ async Task ListenAsync()
305323
}
306324
}
307325

308-
void CancelListener()
326+
private void CancelListener()
309327
{
310328
_cts.Cancel();
311329
_ws.Abort();
312330
_state = WebSocketReadyState.Closed;
313331
}
314332

315-
void OnMessage(String message)
333+
private void OnMessage(String message)
316334
{
317335
var evt = new MessageEvent();
318-
evt.Init(MessageEvent, false, false, message, _url.Origin, String.Empty, _window);
336+
evt.Init(EventNames.Message, false, false, message, _url.Origin, String.Empty, _window);
319337
this.Dispatch(evt);
320338
}
321339

322-
void OnError(Exception ex)
340+
private void OnError(Exception ex)
323341
{
324342
var evt = new ErrorEvent();
325-
evt.Init(ErrorEvent, false, false);
343+
evt.Init(EventNames.Error, false, false);
326344
this.Dispatch(evt);
327345
}
328346

329-
void OnDisconnected()
347+
private void OnDisconnected()
330348
{
331349
var evt = new Event();
332350
evt.Init(CloseEvent, false, false);
333351
this.Dispatch(evt);
334352
}
335353

336-
void OnConnected()
354+
private void OnConnected()
337355
{
338356
var evt = new Event();
339357
evt.Init(OpenEvent, false, false);

src/AngleSharp.Io/IoConfigurationExtensions.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ public static class IoConfigurationExtensions
1919
/// <returns>The new configuration.</returns>
2020
public static IConfiguration WithRequesters(this IConfiguration configuration, Action<ConfigurationExtensions.LoaderSetup> setup = null)
2121
{
22-
var requesters = new IRequester[] { new HttpClientRequester(), new DataRequester(), new FtpRequester(), new FileRequester() };
23-
return configuration.WithDefaultLoader(setup, requesters);
22+
return configuration.WithRequesters(new HttpClientHandler { UseCookies = false, AllowAutoRedirect = false }, setup);
2423
}
2524

2625
/// <summary>

src/AngleSharp.Io/Network/HttpClientRequester.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System;
77
using System.Collections.Generic;
88
using System.Linq;
9+
using System.Net;
910
using System.Net.Http;
1011
using System.Threading;
1112
using System.Threading.Tasks;
@@ -120,9 +121,23 @@ public async Task<IResponse> RequestAsync(IRequest request, CancellationToken ca
120121
}
121122
}
122123

124+
if (IsRedirected(response) && !response.Headers.ContainsKey(HeaderNames.SetCookie))
125+
{
126+
response.Headers[HeaderNames.SetCookie] = String.Empty;
127+
}
128+
123129
return response;
124130
}
125131

132+
private static Boolean IsRedirected(Response response)
133+
{
134+
var status = response.StatusCode;
135+
136+
return status == HttpStatusCode.Redirect || status == HttpStatusCode.RedirectKeepVerb ||
137+
status == HttpStatusCode.RedirectMethod || status == HttpStatusCode.TemporaryRedirect ||
138+
status == HttpStatusCode.MovedPermanently || status == HttpStatusCode.MultipleChoices;
139+
}
140+
126141
#endregion
127142
}
128143
}

src/AngleSharp.Io/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@
1212
[assembly: AssemblyCulture("")]
1313
[assembly: ComVisible(false)]
1414
[assembly: Guid("10d96c84-41d5-4c21-bacf-5d6997c85082")]
15-
[assembly: AssemblyVersion("0.3.1.*")]
16-
[assembly: AssemblyFileVersion("0.3.1")]
15+
[assembly: AssemblyVersion("0.3.2.0")]
16+
[assembly: AssemblyFileVersion("0.3.2")]
1717
[assembly: InternalsVisibleToAttribute("AngleSharp.Io.Tests")]

src/AngleSharp.Io/packages.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
3-
<package id="AngleSharp" version="0.9.7" targetFramework="net45" />
3+
<package id="AngleSharp" version="0.9.8" targetFramework="net45" />
44
</packages>

0 commit comments

Comments
 (0)