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); }