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. ///