Пример #1
0
        public NmeaMessage ParseLine(string line)
        {
            if ((line == null) || (line.Length <= 0))
            {
                return(null);
            }

            NmeaMessage outMessage = null;

            try
            {
                int csIndex = line.LastIndexOf('*');
                if (csIndex <= 0)
                {
                    return(null);
                }

                csIndex++;
                if (csIndex >= line.Length)
                {
                    return(null);
                }

                string   cs       = line.Substring(csIndex, line.Length - csIndex);
                string   tempLine = line.Substring(0, csIndex - 1);
                string[] parts    = tempLine.ToUpper().Split(',');
                if (parts.Length <= 0)
                {
                    return(null);
                }

                if (!ValidateChecksum(tempLine, cs))
                {
                    return(null);
                }

                foreach (NmeaMessage message in _handlers)
                {
                    if (message.IsApplicable(parts))
                    {
                        outMessage = message.CreateEmpty();
                        outMessage.FromNmea(parts);
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                outMessage = new Error(line, ex);
            }

            return(outMessage);
        }