From 164787e3108113c433442cab75ee91c2164d0fa6 Mon Sep 17 00:00:00 2001 From: Jonas Brekle Date: Tue, 4 Jun 2019 22:41:54 +0200 Subject: [PATCH 1/2] set Accept header in request. fixes #9 --- EvtSource/EventSourceReader.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/EvtSource/EventSourceReader.cs b/EvtSource/EventSourceReader.cs index 07d467e..0a7213e 100644 --- a/EvtSource/EventSourceReader.cs +++ b/EvtSource/EventSourceReader.cs @@ -11,6 +11,7 @@ namespace EvtSource public class EventSourceReader : IDisposable { private const string DefaultEventType = "message"; + private const string EventStreamMimeType = "text/event-stream"; public delegate void MessageReceivedHandler(object sender, EventSourceMessageEventArgs e); public delegate void DisconnectEventHandler(object sender, DisconnectEventArgs e); @@ -80,7 +81,6 @@ public void Dispose() Hc.Dispose(); } - private async Task ReaderAsync() { try @@ -92,12 +92,13 @@ private async Task ReaderAsync() Hc.DefaultRequestHeaders.Remove("Last-Event-Id"); } + Hc.DefaultRequestHeaders.TryAddWithoutValidation("Accept", EventStreamMimeType); Hc.DefaultRequestHeaders.TryAddWithoutValidation("Last-Event-Id", LastEventId); } using (HttpResponseMessage response = await Hc.GetAsync(Uri, HttpCompletionOption.ResponseHeadersRead)) { response.EnsureSuccessStatusCode(); - if (response.Headers.TryGetValues("content-type", out IEnumerable ctypes) || ctypes?.Contains("text/event-stream") == false) + if (response.Headers.TryGetValues("content-type", out IEnumerable ctypes) || ctypes?.Contains(EventStreamMimeType) == false) { throw new ArgumentException("Specified URI does not return server-sent events"); } From 263c8647869915e57736f7a9ca8df39d3ba69acb Mon Sep 17 00:00:00 2001 From: Jonas Brekle Date: Tue, 4 Jun 2019 22:54:55 +0200 Subject: [PATCH 2/2] check for EndOfStream and Disconnect if End is reached (might happen after a timeout) --- EvtSource/EventSourceReader.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/EvtSource/EventSourceReader.cs b/EvtSource/EventSourceReader.cs index 0a7213e..e179bb5 100644 --- a/EvtSource/EventSourceReader.cs +++ b/EvtSource/EventSourceReader.cs @@ -110,7 +110,7 @@ private async Task ReaderAsync() string id = string.Empty; var data = new StringBuilder(string.Empty); - while (true) + while (!sr.EndOfStream) { string line = await sr.ReadLineAsync(); if (line == string.Empty) @@ -170,6 +170,7 @@ private async Task ReaderAsync() break; } } + Disconnect(new Exception("stream ended. maybe timeout")); } } }