Exemplo n.º 1
0
        private static void PublishAISPacket(string packet)
        {
            try
            {
                Log.Information(packet);
                Hashtable parsedAIS = new Hashtable();
                parsedAIS = AISParser.Parse(packet);
                if (parsedAIS != null)
                {
                    AISTrack = new Track();
                    AISTrack.TRACK_NUMBER = Convert.ToInt64(parsedAIS["MMSI"]);
                    if ((AISTrack.TRACK_NUMBER.ToString().Length) == 9)
                    {
                        AISTrack.LAT          = Convert.ToDecimal(parsedAIS["Latitude"]);
                        AISTrack.LON          = Convert.ToDecimal(parsedAIS["Longitude"]);
                        AISTrack.SPEED        = Convert.ToDecimal(parsedAIS["SpeedOverGround"]);
                        AISTrack.HEADING      = Convert.ToDecimal(parsedAIS["TrueHeading"]);
                        AISTrack.COURSE       = Convert.ToDecimal(parsedAIS["CourseOverGround"]);
                        AISTrack.STATUS       = Convert.ToInt64(parsedAIS["NavigationalStatus"]);
                        AISTrack.ROT          = Convert.ToInt64(parsedAIS["RateOfTurn"]);
                        AISTrack.FLAG         = Convert.ToString(parsedAIS["RAIMFlag"]);
                        AISTrack.IMO          = Convert.ToInt64(parsedAIS["IMO"]);
                        AISTrack.SHIPTYPENAME = ShipTypes.GetShipTypesCategory(Convert.ToInt32(parsedAIS["ShipType"]));         //unspecified if ShipType not present in packet(0)
                        AISTrack.TRACKTYPE    = "Local AIS";
                        AISTrack.TRACKSOURCE  = "AIS";

                        //Log.Information("Message Type :"+ Convert.ToDecimal(parsedAIS["MessageType"])+", Ship Type: "+ Convert.ToInt32(parsedAIS["ShipType"]));

                        if (Convert.ToDecimal(parsedAIS["MessageType"]) == 5)
                        {
                            Log.Information("TN:{0,-8}\tLAT:{2,-5}\tLON:{3,-8}\tSP:{4,-5} CO:{5,-5}\tIMO:{1,-5} (Source:{6,-5})", AISTrack.TRACK_NUMBER, AISTrack.IMO, Math.Round((decimal)(AISTrack.LAT), 5), Math.Round((decimal)(AISTrack.LON), 5), AISTrack.SPEED, AISTrack.COURSE, AISTrack.TRACKTYPE);
                            AISTrack.TRACK_LABEL  = Convert.ToString(parsedAIS["VesselName"]);
                            AISTrack.DESTINATION  = Convert.ToString(parsedAIS["Destination"]);
                            AISTrack.SHIPTYPENAME = ShipTypes.GetShipTypesCategory(Convert.ToInt32(parsedAIS["ShipType"]));

                            TrackUpdateRequest = new RestRequest("api/AISTracks/" + AISTrack.TRACK_NUMBER, Method.PUT);
                            TrackUpdateRequest.RequestFormat = DataFormat.Json;
                            TrackUpdateRequest.AddJsonBody(AISTrack);
                            IRestResponse response = RestClient.Execute(TrackUpdateRequest);
                            Log.Information(response.StatusCode.ToString());
                        }
                        else
                        {
                            Log.Information("TN:{0,-8}\tLAT:{2,-5}\tLON:{3,-8}\tSP:{4,-5} CO:{5,-5}\tIMO:{1,-5} (Source:{6,-5})", AISTrack.TRACK_NUMBER, AISTrack.IMO, Math.Round((decimal)(AISTrack.LAT), 5), Math.Round((decimal)(AISTrack.LON), 5), AISTrack.SPEED, AISTrack.COURSE, AISTrack.TRACKTYPE);
                            TrackRequest.Parameters.Clear();
                            TrackRequest.AddJsonBody(AISTrack);
                            IRestResponse response = RestClient.Execute(TrackRequest);
                            Log.Information(response.StatusCode.ToString());
                        }
                    }
                }
                else
                {
                    Log.Error(packet);
                }
            }

            catch (Exception ex)
            {
                Log.Error(ex, "{@Message}" + Environment.NewLine + "{StackTrace}.", ex.Message, ex.StackTrace);
            }
        }