diff --git a/skyscraper8/ReutersWne/ReutersWneExtractor.cs b/skyscraper8/ReutersWne/ReutersWneExtractor.cs index 68e9fce..bb03ebb 100644 --- a/skyscraper8/ReutersWne/ReutersWneExtractor.cs +++ b/skyscraper8/ReutersWne/ReutersWneExtractor.cs @@ -305,7 +305,7 @@ internal class ReutersWneExtractor : ISkyscraperMpePlugin { if (length == 16 && udpPayload[11] == 0x07) { - //Empty packet, likely to be used to announce stories. + //Empty packet, likely to be used to announce stories. if (!wneStories.ContainsKey(sessionId)) { _logger.InfoFormat("Found new WNE story #{0}", sessionId); @@ -361,9 +361,13 @@ internal class ReutersWneExtractor : ISkyscraperMpePlugin } return false; } - + wneStories[sessionId].AppendPayloadBlock(udpPayload.Slice(16)); - Handler?.OnWneStoryProgress(new WneStoryProgress(wneStories[sessionId])); + + if (wneStories[sessionId].IsProgressEventWorthwhile()) + { + Handler?.OnWneStoryProgress(new WneStoryProgress(wneStories[sessionId])); + } return true; } } diff --git a/skyscraper8/ReutersWne/WneStory.cs b/skyscraper8/ReutersWne/WneStory.cs index 4b7576e..f9620c3 100644 --- a/skyscraper8/ReutersWne/WneStory.cs +++ b/skyscraper8/ReutersWne/WneStory.cs @@ -131,6 +131,21 @@ internal class WneStory : IDisposable return new WneStoryProgress(this); } + private DateTime progressLastReported; + internal bool IsProgressEventWorthwhile() + { + DateTime now = DateTime.Now; + TimeSpan sinceLastReport = now - progressLastReported; + if (sinceLastReport.TotalMilliseconds > 100) + { + progressLastReported = now; + return true; + } + else + { + return false; + } + } } struct WneStoryProgress diff --git a/skyscraper8/Skyscraper/IO/RemoteStreamReader/RemoteStreamReaderClient.cs b/skyscraper8/Skyscraper/IO/RemoteStreamReader/RemoteStreamReaderClient.cs index 61f01df..ecb3b7d 100644 --- a/skyscraper8/Skyscraper/IO/RemoteStreamReader/RemoteStreamReaderClient.cs +++ b/skyscraper8/Skyscraper/IO/RemoteStreamReader/RemoteStreamReaderClient.cs @@ -36,6 +36,16 @@ namespace skyscraper5.Skyscraper.IO.RemoteStreamReader TcpStream = tcpClient.GetStream(); RemoteStreamReaderConstants greeting = (RemoteStreamReaderConstants)TcpStream.ReadUInt32BE(); + switch (greeting) + { + case RemoteStreamReaderConstants.SERVER_READY: + return; + case RemoteStreamReaderConstants.DENIED_UNKNOWN_ADDRESS_FAMILY: + throw new RemoteStreamReaderException("The remote server says that this client is using an invalid Network adressing family. Please ensure that IPv4 and/or IPv6 are available on both the server and the client."); + case RemoteStreamReaderConstants.DENIED_EXTERNAL_ACCESS: + throw new RemoteStreamReaderException("The remote server thinks that this client is on another network than itself. For security purposes, RemoteStreamReader is not routeable."); + + } if (greeting != RemoteStreamReaderConstants.SERVER_READY) { tcpClient.Close(); diff --git a/skyscraper8/Skyscraper/IO/RemoteStreamReader/RemoteStreamReaderConstants.cs b/skyscraper8/Skyscraper/IO/RemoteStreamReader/RemoteStreamReaderConstants.cs index 7c4a498..726272b 100644 --- a/skyscraper8/Skyscraper/IO/RemoteStreamReader/RemoteStreamReaderConstants.cs +++ b/skyscraper8/Skyscraper/IO/RemoteStreamReader/RemoteStreamReaderConstants.cs @@ -44,6 +44,8 @@ REQUEST_RF_SCAN_2, REQUEST_FFT_TERM, REQUEST_FFT_INIT, - REQUEST_FFT_SCAN + REQUEST_FFT_SCAN, + DENIED_UNKNOWN_ADDRESS_FAMILY, + DENIED_EXTERNAL_ACCESS } }