/// <summary> /// Raises the event on the SimConnect wrapper that causes the <see cref="ReadAircraftInformation"/> object passed across /// to be picked up by the FSX object. /// </summary> /// <param name="readAircraft"></param> private void SendAircraftInformation(ReadAircraftInformation readAircraft) { _SimConnect.Raise(m => m.ObjectReceived += null, new SimConnectObjectReceivedEventArgs() { DefineId = Convert.ToUInt32(_ReadAircraftInformationDefinitionId), Data = new object[] { readAircraft } }); }
/// <summary> /// Copies the aircraft information from FSX into the flight simulator aircraft list. /// </summary> /// <param name="fsxAircraft"></param> private void UpdateFlightSimulatorAircraftList(ReadAircraftInformation fsxAircraft) { lock (FlightSimulatorAircraftList.ListSyncLock) { IAircraft aircraft; if (FlightSimulatorAircraftList.Aircraft.Count != 0) { aircraft = FlightSimulatorAircraftList.Aircraft[0]; } else { aircraft = Factory.Singleton.Resolve <IAircraft>(); aircraft.Icao24 = "000000"; aircraft.UniqueId = 1; FlightSimulatorAircraftList.Aircraft.Add(aircraft); } _MaximumAirspeed = fsxAircraft.MaxAirspeedIndicated; lock (aircraft) { var now = _Clock.UtcNow; aircraft.DataVersion = now.Ticks; aircraft.Latitude = (float)fsxAircraft.Latitude; aircraft.Longitude = (float)fsxAircraft.Longitude; aircraft.GroundSpeed = (int)fsxAircraft.AirspeedIndicated; aircraft.Track = (float)fsxAircraft.TrueHeading; aircraft.Type = fsxAircraft.Type; aircraft.Model = fsxAircraft.Model; aircraft.Operator = fsxAircraft.Operator; aircraft.Registration = fsxAircraft.Registration; aircraft.Squawk = fsxAircraft.Squawk; if (fsxAircraft.OnGround) { aircraft.Altitude = 0; aircraft.VerticalRate = 0; } else { aircraft.Altitude = (int)fsxAircraft.Altitude; aircraft.VerticalRate = (int)fsxAircraft.VerticalSpeed; } aircraft.UpdateCoordinates(now, _ShortTrailLengthSeconds); } } }
public void TestInitialise() { _OriginalClassFactory = Factory.CreateChildFactory(); _SimConnect = TestUtilities.CreateMockImplementation <ISimConnectWrapper>(); _SimConnect.Setup(m => m.IsInstalled).Returns(true); _Fsx = Factory.Resolve <IFlightSimulatorX>(); _ClientEventIdMap = new Dictionary <string, Enum>(); _SimConnect.Setup(m => m.MapClientEventToSimEvent(It.IsAny <Enum>(), It.IsAny <string>())).Callback((Enum id, string name) => { _ClientEventIdMap.Add(name, id); }); _SystemEventIdMap = new Dictionary <string, Enum>(); _SimConnect.Setup(m => m.SubscribeToSystemEvent(It.IsAny <Enum>(), It.IsAny <string>())).Callback((Enum id, string name) => { _SystemEventIdMap.Add(name, id); }); _NotificationGroupMap = new Dictionary <Enum, Enum>(); _SimConnect.Setup(m => m.AddClientEventToNotificationGroup(It.IsAny <Enum>(), It.IsAny <Enum>(), false)).Callback((Enum groupId, Enum eventId, bool maskable) => { _NotificationGroupMap.Add(eventId, groupId); }); _ReadAircraftInformationDefinitionId = default(Enum); _SimConnect.Setup(m => m.RegisterDataDefineStruct <ReadAircraftInformation>(It.IsAny <Enum>())).Callback((Enum definitionId) => { _ReadAircraftInformationDefinitionId = definitionId; }); _AircraftInformationRequestId = default(Enum); _SimConnect.Setup(m => m.RequestDataOnSimObjectType(It.IsAny <Enum>(), It.IsAny <Enum>(), It.IsAny <uint>(), It.IsAny <int>())).Callback((Enum requestId, Enum definitionId, uint radius, int objectType) => { if (definitionId == _ReadAircraftInformationDefinitionId) { _AircraftInformationRequestId = requestId; } }); _WriteAircraftInformationDefinitionId = default(Enum); _SimConnect.Setup(m => m.RegisterDataDefineStruct <WriteAircraftInformation>(It.IsAny <Enum>())).Callback((Enum definitionId) => { _WriteAircraftInformationDefinitionId = definitionId; }); _ConnectionStatusChangedEvent = new EventRecorder <EventArgs>(); _FreezeStatusChangedEvent = new EventRecorder <EventArgs>(); _SlewStatusChangedEvent = new EventRecorder <EventArgs>(); _FlightSimulatorXExceptionRaisedEvent = new EventRecorder <EventArgs <FlightSimulatorXException> >(); _AircraftInformationReceivedEvent = new EventRecorder <EventArgs <ReadAircraftInformation> >(); _SlewToggledEvent = new EventRecorder <EventArgs>(); _ReadAircraftInformation = new ReadAircraftInformation(); _WriteAircraftInformation = new WriteAircraftInformation(); _Message = new Message(); }