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); }
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 }); } } }
public static string Serialize(AisMessage aisMessage) { return(JsonConvert.SerializeObject(aisMessage, Settings)); }
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); }