private AisMessage CreateAisMessageFromSentence(AisSentence sentence)
        {
            var asciiDecimal = sentence.Payload.Select(AisEncoding.GetAsciiDecimalFromByte).ToArray();

            var payLoad = Utils.ConvertToMsb6Bit(asciiDecimal);

            if (sentence.FillBits != 0)
            {
                PadPayLoad(payLoad, sentence.FillBits);
            }

            return(CreateAisMessageFromBitPayload(payLoad));
        }
예제 #2
0
        public Record AddSentence(AisSentence sentence)
        {
            Record record;

            if (m_buffer.TryGetValue(sentence.SentenceId, out record))
            {
                return(record.AddSentence(sentence));
            }

            CheckBufferLimit();
            record = new Record().AddSentence(sentence);
            m_buffer.Add(sentence.SentenceId, record);
            return(record);
        }
예제 #3
0
 public static string ToNmeaString(this AisSentence sentence)
 {
     return(new StringBuilder()
            .Append(c_leadChar)
            .Append(sentence.TalkedId)
            .Append(c_separator)
            .Append(sentence.FragmentCount.ToString("X"))
            .Append(c_separator)
            .Append(sentence.FragmentNumber.ToString("X"))
            .Append(c_separator)
            .Append(sentence.SentenceId == 0 ? string.Empty : sentence.SentenceId.ToString("X"))
            .Append(c_separator)
            .Append(sentence.Channel)
            .Append(c_separator)
            .Append(Encoding.ASCII.GetString(sentence.Payload))
            .Append(c_separator)
            .Append(sentence.FillBits)
            .Append(c_fillBitSeparator)
            .Append(sentence.CheckSum.ToString("X")).ToString());
 }
        /// <summary>
        /// Creates ais message from sentence.
        /// </summary>
        /// <param name="sentence">Ais sentence produced by Sentence factory.</param>
        /// <param name="isFragmented">True if message is fragment, false if message is complete.</param>
        /// <returns>Instance of supported ais message class, null if passed sentence is fragment, isFragmented is true in this case.</returns>
        public AisMessage CreateAisMessage(AisSentence sentence, out bool isFragmented)
        {
            if (sentence.FragmentCount <= 1)
            {
                isFragmented = false;
                return(CreateAisMessageFromSentence(sentence));
            }


            var record = m_buffer.AddSentence(sentence);

            if (record.IsComplete())
            {
                isFragmented = false;
                return(CreateAisMessageFromFragments(record.Sentences));
            }

            isFragmented = true;
            return(null);
        }
예제 #5
0
 public Record AddSentence(AisSentence sentence)
 {
     m_count = sentence.FragmentCount;
     m_sentences.Add(sentence);
     return(this);
 }