Esempio n. 1
0
        private async void simconnect_OnRecvSystemState(SimConnect sender, SIMCONNECT_RECV_SYSTEM_STATE data)
        {
            switch (data.dwRequestID)
            {
            case (int)DATA_REQUESTS.FLIGHT_PLAN:
                if (!string.IsNullOrEmpty(data.szString))
                {
                    logger.LogInformation($"Receive flight plan {data.szString}");

                    var planName = data.szString;
                    var parser   = new FlightPlanParser();
                    var plan     = await parser.ParseAsync(planName);

                    var flightPlan = new FlightPlan
                    {
                        Title     = plan.FlightPlanFlightPlan.Title,
                        Departure = new Point
                        {
                            Id       = plan.FlightPlanFlightPlan.DepartureID,
                            Name     = plan.FlightPlanFlightPlan.DepartureName,
                            Position = plan.FlightPlanFlightPlan.DeparturePosition,
                        },
                        Destination = new Point
                        {
                            Id   = plan.FlightPlanFlightPlan.DestinationID,
                            Name = plan.FlightPlanFlightPlan.DestinationName,
                        },
                        CruisingAltitude = plan.FlightPlanFlightPlan.CruisingAlt
                    };
                    (flightPlan.Departure.Latitude, flightPlan.Departure.Longitude)     = GpsHelper.ConvertString(plan.FlightPlanFlightPlan.DepartureLLA);
                    (flightPlan.Destination.Latitude, flightPlan.Destination.Longitude) = GpsHelper.ConvertString(plan.FlightPlanFlightPlan.DestinationLLA);

                    if (plan.FlightPlanFlightPlan.ATCWaypoint != null)
                    {
                        flightPlan.Waypoints = new System.Collections.Generic.List <Waypoint>();
                        foreach (var waypoint in plan.FlightPlanFlightPlan.ATCWaypoint)
                        {
                            var w = new Waypoint
                            {
                                Id     = waypoint.id,
                                Type   = waypoint.ATCWaypointType,
                                Airway = waypoint.ATCAirway,
                            };
                            (w.Latitude, w.Longitude) = GpsHelper.ConvertString(waypoint.WorldPosition);
                            flightPlan.Waypoints.Add(w);
                        }
                    }

                    FlightPlanUpdated?.Invoke(this, new FlightPlanUpdatedEventArgs(flightPlan));
                }
                break;
            }
        }
Esempio n. 2
0
        private async void Simconnect_OnRecvSystemState(SimConnect sender, SIMCONNECT_RECV_SYSTEM_STATE data)
        {
            switch (data.dwRequestID)
            {
            case (int)DATA_REQUESTS.FLIGHT_PLAN:
                if (!string.IsNullOrEmpty(data.szString))
                {
                    logger.LogInformation($"Received flight plan {data.szString}");

                    var planName = data.szString;

                    if (planName == ".PLN")
                    {
                        logger.LogInformation("Flight plan is not read. Wait for 5s...");
                        await Task.Delay(5000);

                        simconnect.RequestSystemState(DATA_REQUESTS.FLIGHT_PLAN, "FlightPlan");
                    }
                    else
                    {
                        if (File.Exists(planName))
                        {
                            using var stream = File.OpenRead(planName);
                            var serializer = new XmlSerializer(typeof(FlightPlanDocumentXml));
                            var flightPlan = serializer.Deserialize(stream) as FlightPlanDocumentXml;

                            var flightPlanData = flightPlan.FlightPlan.ToData();
                            FlightPlanUpdated?.Invoke(this, new FlightPlanUpdatedEventArgs(flightPlanData));

                            flightPlanTcs?.TrySetResult(flightPlanData);
                            flightPlanTcs = null;
                        }
                        else
                        {
                            logger.LogWarning($"{planName} does not exist!");

                            FlightPlanUpdated?.Invoke(this, new FlightPlanUpdatedEventArgs(null));
                            flightPlanTcs?.TrySetResult(null);
                            flightPlanTcs = null;
                        }
                    }
                }
                break;
            }
        }