From cb5249db7316112b835c95e1166c18d91294d2a1 Mon Sep 17 00:00:00 2001 From: Morten Nielsen Date: Tue, 25 Aug 2020 15:39:40 -0700 Subject: [PATCH] Implemement `NmeaMessage : IEquatable` Also avoid processing identical messages in GnssMonitor --- src/NmeaParser/Gnss/GnssMonitor.cs | 4 ++++ src/NmeaParser/Nmea/NmeaMessage.cs | 17 ++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/NmeaParser/Gnss/GnssMonitor.cs b/src/NmeaParser/Gnss/GnssMonitor.cs index 669f2a9..af5fcbe 100644 --- a/src/NmeaParser/Gnss/GnssMonitor.cs +++ b/src/NmeaParser/Gnss/GnssMonitor.cs @@ -75,7 +75,11 @@ namespace NmeaParser.Gnss double lon = 0; List properties = new List(); lock (m_lock) + { + if(m_allMessages.ContainsKey(message.MessageType) && m_allMessages[message.MessageType].Equals(message)) + return; // Nothing to update/notify m_allMessages[message.MessageType] = message; + } properties.Add(nameof(AllMessages)); if (message.TalkerId == NmeaParser.Talker.GlobalNavigationSatelliteSystem) m_supportGNMessages = true; // Support for GN* messages detected diff --git a/src/NmeaParser/Nmea/NmeaMessage.cs b/src/NmeaParser/Nmea/NmeaMessage.cs index 14db334..fbed360 100644 --- a/src/NmeaParser/Nmea/NmeaMessage.cs +++ b/src/NmeaParser/Nmea/NmeaMessage.cs @@ -52,7 +52,7 @@ namespace NmeaParser.Messages /// /// NMEA Message base class. /// - public abstract class NmeaMessage + public abstract class NmeaMessage : IEquatable { private readonly static Dictionary messageTypes; @@ -301,6 +301,21 @@ namespace NmeaParser.Messages return TimeSpan.Zero; } + /// + public bool Equals(NmeaMessage other) + { + if (other.MessageType != MessageType) + return false; + if (other.MessageParts.Count != MessageParts.Count) + return false; + for (int i = 0; i < MessageParts.Count; i++) + { + if (other.MessageParts[i] != MessageParts[i]) + return false; + } + return true; + } + /// /// Gets a relative timestamp in milliseconds indicating the time the message was created. ///