Beispiel #1
0
        public static AisMessage DecodeAisString(string armoredString)
        {
            var    aisMsg = new AisMessage();
            string binary = DecodeVDXArmoredString(armoredString);

            aisMsg.MessageType     = Convert.ToInt32(binary.Substring(0, 6), 2);
            aisMsg.RepeatIndicator = Convert.ToInt32(binary.Substring(6, 2), 2);
            aisMsg.MMSI            = Convert.ToInt32(binary.Substring(8, 30), 2);

            switch (aisMsg.MessageType)
            {
            case 1:
            case 2:
            case 3:
                aisMsg.PositionReport = PositionReport.CreateFromBinary(binary);
                break;

            case 4:
                aisMsg.BaseStationReport = BaseStationReport.CreateFromBinary(binary);
                break;

            case 5:
                aisMsg.VoygageReport = VoyageReport.CreateFromBinary(binary);
                break;
            }

            return(aisMsg);
        }
        public static string GetMessage(AisMessage meg)
        {
            string ans = "";

            ans = JsonConvert.SerializeObject(meg, Formatting.Indented, new JsonSerializerSettings()
            {
                NullValueHandling = NullValueHandling.Ignore
            });

            ////去除字符中间的空隙
            ans = ans.Replace("\n", "");
            ans = ans.Replace("\r", "");
            ans = ans.Replace("\t", "");
            return(ans);
        }
Beispiel #3
0
 public void AddShipPosition(AisMessage item)
 {
     if (item is PositionReportClassAMessage || item is ExtendedClassBCsPositionReportMessage)
     {
         if (ShipPositions.ContainsKey(item.Mmsi))
         {
             ShipPositions[item.Mmsi].Add(item);
         }
         else
         {
             ShipPositions.Add(item.Mmsi, new List <AisMessage>()
             {
                 item
             });
         }
     }
 }
Beispiel #4
0
 public static string Serialize(AisMessage aisMessage)
 {
     return(JsonConvert.SerializeObject(aisMessage, Settings));
 }
Beispiel #5
0
        private static void OnMessageReceived(IList <string> messages)
        {
            foreach (var message in messages)
            {
                try
                {
                    AisMessage parsed = null;
                    var        idx    = message.IndexOf('!');
                    if (idx > -1)
                    {
                        var cuttedMessage = message.Substring(idx);
                        if (cuttedMessage.StartsWith("!AIVDM"))
                        {
                            parsed = parser.Parse(cuttedMessage);
                        }
                        else
                        {
                            continue;
                        }
                    }
                    else
                    {
                        parsed = parser.Parse(message);
                    }


                    //var obj = AisMessageJsonConvert.Deserialize(message);

                    Object obj = null;
                    switch (parsed.MessageType)
                    {
                    case AisMessageType.AddressedSafetyRelatedMessage:
                        obj = parsed as AddressedSafetyRelatedMessage;

                        break;

                    case AisMessageType.AidToNavigationReport:
                        obj = parsed as AidToNavigationReportMessage;

                        break;

                    /*
                     * case AisMessageType.AssignmentModeCommand:
                     * obj = parsed as AssignmentModeCommand;
                     *
                     * break;*/
                    case AisMessageType.BaseStationReport:
                        obj = parsed as BaseStationReportMessage;

                        break;

                    case AisMessageType.BinaryAcknowledge:
                        obj = parsed as BinaryAcknowledgeMessage;

                        break;

                    case AisMessageType.BinaryAddressedMessage:
                        obj = parsed as BinaryAddressedMessage;

                        break;

                    case AisMessageType.BinaryBroadcastMessage:
                        obj = parsed as BinaryBroadcastMessage;

                        break;

                    /*
                     * case AisMessageType.ChannelManagement:
                     * obj = parsed as ChannelManagement;
                     *
                     * break;
                     * case AisMessageType.DataLinkManagement:
                     * obj = parsed as DataLinkManagement;
                     *
                     * break;
                     * case AisMessageType.DgnssBinaryBroadcastMessage:
                     * obj = parsed as DgnssBinaryBroadcastMessage;
                     *
                     * break;*/
                    case AisMessageType.ExtendedClassBCsPositionReport:
                        obj = parsed as ExtendedClassBCsPositionReportMessage;

                        break;

                    /*
                     * case AisMessageType.GroupAssignmentCommand:
                     * obj = parsed as GroupAssignmentCommand;
                     *
                     * break;*/
                    case AisMessageType.Interrogation:
                        obj = parsed as InterrogationMessage;

                        break;

                    /*
                     * case AisMessageType.MultipleSlotBinaryMessageWithCommunicationsState:
                     * obj = parsed as MultipleSlotBinaryMessageWithCommunicationsState;
                     *
                     * break;*/
                    case AisMessageType.PositionReportClassA:
                        obj = parsed as PositionReportClassAMessage;

                        break;

                    case AisMessageType.PositionReportClassAAssignedSchedule:
                        obj = parsed as PositionReportClassAAssignedScheduleMessage;

                        break;

                    case AisMessageType.PositionReportClassAResponseToInterrogation:
                        obj = parsed as PositionReportClassAResponseToInterrogationMessage;

                        break;

                    case AisMessageType.PositionReportForLongRangeApplications:
                        obj = parsed as PositionReportForLongRangeApplicationsMessage;

                        break;

                    case AisMessageType.SafetyRelatedAcknowledgement:
                        obj = parsed as SafetyRelatedAcknowledgementMessage;

                        break;

                    /*
                     * case AisMessageType.SafetyRelatedBroadcastMessage:
                     * obj = parsed as SafetyRelatedBroadcastMessage;
                     *
                     * break;
                     * case AisMessageType.SingleSlotBinaryMessage:
                     * obj = parsed as SingleSlotBinaryMessage;
                     *
                     * break;*/
                    case AisMessageType.StandardClassBCsPositionReport:
                        obj = parsed as StandardClassBCsPositionReportMessage;

                        break;

                    case AisMessageType.StandardSarAircraftPositionReport:
                        obj = parsed as StandardSarAircraftPositionReportMessage;

                        break;

                    case AisMessageType.StaticAndVoyageRelatedData:
                        obj = parsed as StaticAndVoyageRelatedDataMessage;

                        break;

                    case AisMessageType.StaticDataReport:
                        obj = parsed as StaticDataReportMessage;

                        break;

                    case AisMessageType.UtcAndDateInquiry:
                        obj = parsed as UtcAndDateInquiryMessage;

                        break;

                    case AisMessageType.UtcAndDateResponse:
                        obj = parsed as UtcAndDateResponseMessage;

                        break;
                    }
                    if (obj != null)
                    {
                        var msg = obj as AisMessage;
                        Console.WriteLine($"{nameof(parsed.MessageType)} {msg}");
                        var insertObj = new DataAIS()
                        {
                            Id = redis.GetSequence <DataAIS>(), Data = msg, Tipe = nameof(parsed.MessageType)
                        };
                        var result = redis.InsertData <DataAIS>(insertObj);
                        Console.WriteLine($"insert to redis : {result}");
                    }
                }catch (Exception ex)
                {
                    Console.WriteLine($"error parsing : {ex.Message}");
                }
                Console.WriteLine($"{message}");
            }

            //storageClient.AppendMessages(messages);
        }