示例#1
0
        /// <summary>
        ///     Subclasses need to override with their own parsing method
        /// </summary>
        /// <param name="sixState"></param>
        /// <exception cref="SixbitsExhaustedException"></exception>
        /// <exception cref="AisMessageException"></exception>
        public override void Parse(Sixbit sixState)
        {
            if (sixState.BitLength != 312)
            {
                throw new AisMessageException("Message 19 wrong length");
            }

            base.Parse(sixState);

            Regional1 = (int)sixState.Get(8);
            Sog       = (int)sixState.Get(10);
            PosAcc    = (int)sixState.Get(1);

            Pos = new Position {
                Longitude = sixState.Get(28),
                Latitude  = sixState.Get(27)
            };

            Cog          = (int)sixState.Get(12);
            TrueHeading  = (int)sixState.Get(9);
            UtcSec       = (int)sixState.Get(6);
            Regional2    = (int)sixState.Get(4);
            Name         = sixState.GetString(20);
            ShipType     = (int)sixState.Get(8);
            DimBow       = (int)sixState.Get(9);
            DimStern     = (int)sixState.Get(9);
            DimPort      = (int)sixState.Get(6);
            DimStarboard = (int)sixState.Get(6);
            PosType      = (int)sixState.Get(4);
            Raim         = (int)sixState.Get(1);
            Dte          = (int)sixState.Get(1);
            Spare        = (int)sixState.Get(5);
        }
示例#2
0
        /// <summary>
        ///     Subclasses need to override with their own parsing method
        /// </summary>
        /// <param name="sixState"></param>
        /// <exception cref="SixbitsExhaustedException"></exception>
        /// <exception cref="AisMessageException"></exception>
        public override void Parse(Sixbit sixState)
        {
            var length = sixState.BitLength;

            if (length != 160 && length != 168)
            {
                throw new AisMessageException("Message 24 wrong length");
            }

            base.Parse(sixState);

            PartNumber = (int)sixState.Get(2);

            if (PartNumber == 0)
            {
                /* Parse 24A */
                /* Get the Ship Name, convert to ASCII */
                Name = sixState.GetString(20);

                /* Indicate reception of part A */
                Flags |= 0x01;
            }
            else if (PartNumber == 1)
            {
                /* Parse 24B */
                ShipType = (int)sixState.Get(8);
                VendorId = sixState.GetString(7);
                Callsign = sixState.GetString(7);

                DimBow       = (int)sixState.Get(9);
                DimStern     = (int)sixState.Get(9);
                DimPort      = (int)sixState.Get(6);
                DimStarboard = (int)sixState.Get(6);
                Spare        = (int)sixState.Get(6);

                /* Indicate reception of part A */
                Flags |= 0x02;
            }
            else
            {
                throw new AisMessageException("Unknown Message 24 Part #");
            }
        }
示例#3
0
        /// <summary>
        ///     Subclasses need to override with their own parsing method
        /// </summary>
        /// <param name="sixState"></param>
        /// <exception cref="SixbitsExhaustedException"></exception>
        /// <exception cref="AisMessageException"></exception>
        public override void Parse(Sixbit sixState)
        {
            var length = sixState.BitLength;

            if (length < 272 || length > 360)
            {
                throw new AisMessageException("Message 21 wrong length");
            }

            base.Parse(sixState);

            AtonType = (int)sixState.Get(5);
            Name     = sixState.GetString(20);
            PosAcc   = (int)sixState.Get(1);

            Pos = new Position {
                Longitude = sixState.Get(28),
                Latitude  = sixState.Get(27)
            };

            DimBow         = (int)sixState.Get(9);
            DimStern       = (int)sixState.Get(9);
            DimPort        = (int)sixState.Get(6);
            DimStarboard   = (int)sixState.Get(6);
            PosType        = (int)sixState.Get(4);
            UtcSec         = (int)sixState.Get(6);
            OffPosition    = (int)sixState.Get(1);
            Regional       = (int)sixState.Get(8);
            Raim           = (int)sixState.Get(1);
            VirtualRenamed = (int)sixState.Get(1);
            Assigned       = (int)sixState.Get(1);
            Spare1         = (int)sixState.Get(1);

            if (length > 272)
            {
                NameExt = sixState.GetString((length - 272) / 6);
            }
        }
示例#4
0
        /// <summary>
        ///     Subclasses need to override with their own parsing method
        /// </summary>
        /// <param name="sixState"></param>
        /// <exception cref="SixbitsExhaustedException"></exception>
        /// <exception cref="AisMessageException"></exception>
        public override void Parse(Sixbit sixState)
        {
            if (sixState.BitLength != 424)
            {
                throw new AisMessageException("Message 5 wrong length");
            }

            base.Parse(sixState);

            Version      = (int)sixState.Get(2);
            Imo          = sixState.Get(30);
            Callsign     = sixState.GetString(7);
            Name         = sixState.GetString(20);
            ShipType     = (int)sixState.Get(8);
            DimBow       = (int)sixState.Get(9);
            DimStern     = (int)sixState.Get(9);
            DimPort      = (int)sixState.Get(6);
            DimStarboard = (int)sixState.Get(6);
            PosType      = (int)sixState.Get(4);
            Eta          = sixState.Get(20);
            Draught      = (int)sixState.Get(8);
            Dest         = sixState.GetString(20);
        }
示例#5
0
        /// <summary>
        ///     Subclasses need to override with their own parsing method
        /// </summary>
        /// <param name="sixState"></param>
        /// <exception cref="SixbitsExhaustedException"></exception>
        /// <exception cref="AisMessageException"></exception>
        public override void Parse(Sixbit sixState)
        {
            var length = sixState.BitLength;

            if (length < 40 || length > 1008)
            {
                throw new AisMessageException("Message 14 wrong length");
            }

            base.Parse(sixState);

            Spare   = (int)sixState.Get(2);
            Message = sixState.GetString((length - 40) / 6);
        }
示例#6
0
        /// <summary>
        ///     Subclasses need to override with their own parsing method
        /// </summary>
        /// <param name="sixState"></param>
        /// <exception cref="SixbitsExhaustedException"></exception>
        /// <exception cref="AisMessageException"></exception>
        public override void Parse(Sixbit sixState)
        {
            var length = sixState.BitLength;

            if (length < 72 || length > 1008)
            {
                throw new AisMessageException("Message 12 wrong length");
            }

            base.Parse(sixState);

            Sequence    = (int)sixState.Get(2);
            Destination = sixState.Get(30);
            Retransmit  = (int)sixState.Get(1);
            Spare       = (int)sixState.Get(1);

            Message = sixState.GetString((length - 72) / 6);
        }