diff --git a/App.xaml.cs b/App.xaml.cs index 31fed94..9776f1d 100644 --- a/App.xaml.cs +++ b/App.xaml.cs @@ -1,7 +1,7 @@ using System; using System.Reflection; using System.Windows; -using fs2ff.FlightSim; +using fs2ff.SimConnect; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; @@ -49,7 +49,7 @@ protected override async void OnStartup(StartupEventArgs e) public void ConfigureServices(IServiceCollection services) { services.AddSingleton(); - services.AddSingleton(); + services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddHostedService(provider => provider.GetRequiredService()); diff --git a/MainViewModel.cs b/MainViewModel.cs index 3b322b3..29ef8c6 100644 --- a/MainViewModel.cs +++ b/MainViewModel.cs @@ -6,18 +6,18 @@ using System.Threading.Tasks; using System.Windows.Input; using System.Windows.Threading; -using fs2ff.FlightSim; using fs2ff.Models; +using fs2ff.SimConnect; #pragma warning disable 67 namespace fs2ff { [SuppressMessage("ReSharper", "NotAccessedField.Local", Justification = "DispatcherTimer field is kept to prevent premature GC")] - public class MainViewModel : INotifyPropertyChanged, IFlightSimMessageHandler + public class MainViewModel : INotifyPropertyChanged, ISimConnectMessageHandler { private readonly DataSender _dataSender; - private readonly FlightSimAdapter _flightSim; + private readonly SimConnectAdapter _simConnect; private readonly IpDetectionService _ipDetectionService; private readonly DispatcherTimer _ipHintTimer; @@ -31,15 +31,15 @@ public class MainViewModel : INotifyPropertyChanged, IFlightSimMessageHandler private IPAddress? _ipAddress; private uint _ipHintMinutesLeft = Preferences.Default.ip_hint_time; - public MainViewModel(DataSender dataSender, FlightSimAdapter flightSim, IpDetectionService ipDetectionService) + public MainViewModel(DataSender dataSender, SimConnectAdapter simConnect, IpDetectionService ipDetectionService) { _dataSender = dataSender; - _flightSim = flightSim; - _flightSim.StateChanged += FlightSim_StateChanged; - _flightSim.PositionReceived += FlightSim_PositionReceived; - _flightSim.AttitudeReceived += FlightSim_AttitudeReceived; - _flightSim.TrafficReceived += FlightSim_TrafficReceived; + _simConnect = simConnect; + _simConnect.StateChanged += SimConnectStateChanged; + _simConnect.PositionReceived += SimConnectPositionReceived; + _simConnect.AttitudeReceived += SimConnectAttitudeReceived; + _simConnect.TrafficReceived += SimConnectTrafficReceived; _ipDetectionService = ipDetectionService; _ipDetectionService.NewIpDetected += IpDetectionService_NewIpDetected; @@ -77,7 +77,7 @@ public uint AttitudeFrequency set { _attitudeFrequency = value.AdjustToBounds(AttitudeFrequencyMin, AttitudeFrequencyMax); - _flightSim.SetAttitudeFrequency(_attitudeFrequency); + _simConnect.SetAttitudeFrequency(_attitudeFrequency); Preferences.Default.att_freq = value; Preferences.Default.Save(); } @@ -203,7 +203,7 @@ public IntPtr WindowHandle private FlightSimState CurrentFlightSimState => _errorOccurred ? FlightSimState.ErrorOccurred - : _flightSim.Connected + : _simConnect.Connected ? FlightSimState.Connected : FlightSimState.Disconnected; @@ -227,16 +227,16 @@ public void Dispose() { _ipDetectionService.NewIpDetected -= IpDetectionService_NewIpDetected; - _flightSim.TrafficReceived -= FlightSim_TrafficReceived; - _flightSim.AttitudeReceived -= FlightSim_AttitudeReceived; - _flightSim.PositionReceived -= FlightSim_PositionReceived; - _flightSim.StateChanged -= FlightSim_StateChanged; - _flightSim.Dispose(); + _simConnect.TrafficReceived -= SimConnectTrafficReceived; + _simConnect.AttitudeReceived -= SimConnectAttitudeReceived; + _simConnect.PositionReceived -= SimConnectPositionReceived; + _simConnect.StateChanged -= SimConnectStateChanged; + _simConnect.Dispose(); _dataSender.Dispose(); } - public void ReceiveFlightSimMessage() => _flightSim.ReceiveMessage(); + public void ReceiveFlightSimMessage() => _simConnect.ReceiveMessage(); private bool CanConnect() => WindowHandle != IntPtr.Zero; @@ -245,13 +245,13 @@ private void CheckForUpdates() UpdateChecker.Check().ContinueWith(task => UpdateInfo = task.Result, TaskScheduler.FromCurrentSynchronizationContext()); } - private void Connect() => _flightSim.Connect(WindowHandle, AttitudeFrequency); + private void Connect() => _simConnect.Connect(WindowHandle, AttitudeFrequency); - private void Disconnect() => _flightSim.Disconnect(); + private void Disconnect() => _simConnect.Disconnect(); private void DismissSettingsPane() => SettingsPaneVisible = false; - private async Task FlightSim_AttitudeReceived(Attitude att) + private async Task SimConnectAttitudeReceived(Attitude att) { if (DataAttitudeEnabled) { @@ -259,7 +259,7 @@ private async Task FlightSim_AttitudeReceived(Attitude att) } } - private async Task FlightSim_PositionReceived(Position pos) + private async Task SimConnectPositionReceived(Position pos) { if (DataPositionEnabled) { @@ -267,7 +267,7 @@ private async Task FlightSim_PositionReceived(Position pos) } } - private void FlightSim_StateChanged(bool failure) + private void SimConnectStateChanged(bool failure) { _errorOccurred = failure; @@ -275,7 +275,7 @@ private void FlightSim_StateChanged(bool failure) UpdateVisualState(); } - private async Task FlightSim_TrafficReceived(Traffic tfk, uint id) + private async Task SimConnectTrafficReceived(Traffic tfk, uint id) { if (DataTrafficEnabled) { @@ -301,7 +301,7 @@ private void IpDetectionService_NewIpDetected(IPAddress ip) private void IpHintCallback(object? sender, EventArgs e) { - if (IpHintMinutesLeft > 0 && IpAddress == null && _flightSim.Connected) + if (IpHintMinutesLeft > 0 && IpAddress == null && _simConnect.Connected) { IpHintMinutesLeft--; } @@ -330,7 +330,7 @@ private void ResetIpHintMinutesLeft() private void ToggleConnect() { - if (_flightSim.Connected) Disconnect(); + if (_simConnect.Connected) Disconnect(); else Connect(); } diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs index 65d719d..14b574e 100644 --- a/MainWindow.xaml.cs +++ b/MainWindow.xaml.cs @@ -4,7 +4,7 @@ using System.ComponentModel; using System.Windows; using System.Windows.Interop; -using fs2ff.FlightSim; +using fs2ff.SimConnect; namespace fs2ff { @@ -23,14 +23,14 @@ protected override void OnSourceInitialized(EventArgs e) HwndSource hwndSource = (HwndSource) PresentationSource.FromVisual(this)!; hwndSource.AddHook(WndProc); - ((IFlightSimMessageHandler) DataContext).WindowHandle = hwndSource.Handle; + ((ISimConnectMessageHandler) DataContext).WindowHandle = hwndSource.Handle; } private IntPtr WndProc(IntPtr hWnd, int iMsg, IntPtr hWParam, IntPtr hLParam, ref bool bHandled) { if (iMsg == WM_USER_SIMCONNECT) { - ((IFlightSimMessageHandler) DataContext).ReceiveFlightSimMessage(); + ((ISimConnectMessageHandler) DataContext).ReceiveFlightSimMessage(); } return IntPtr.Zero; @@ -38,7 +38,7 @@ private IntPtr WndProc(IntPtr hWnd, int iMsg, IntPtr hWParam, IntPtr hLParam, re private void Window_Closing(object sender, CancelEventArgs e) { - ((IFlightSimMessageHandler) DataContext).Dispose(); + ((ISimConnectMessageHandler) DataContext).Dispose(); } } } diff --git a/FlightSim/DEFINITION.cs b/SimConnect/DEFINITION.cs similarity index 88% rename from FlightSim/DEFINITION.cs rename to SimConnect/DEFINITION.cs index ca273a3..040c676 100644 --- a/FlightSim/DEFINITION.cs +++ b/SimConnect/DEFINITION.cs @@ -1,7 +1,7 @@ // ReSharper disable InconsistentNaming // ReSharper disable UnusedMember.Global -namespace fs2ff.FlightSim +namespace fs2ff.SimConnect { public enum DEFINITION : uint { diff --git a/FlightSim/EVENT.cs b/SimConnect/EVENT.cs similarity index 87% rename from FlightSim/EVENT.cs rename to SimConnect/EVENT.cs index 653e846..628627b 100644 --- a/FlightSim/EVENT.cs +++ b/SimConnect/EVENT.cs @@ -1,7 +1,7 @@ // ReSharper disable InconsistentNaming // ReSharper disable UnusedMember.Global -namespace fs2ff.FlightSim +namespace fs2ff.SimConnect { public enum EVENT : uint { diff --git a/FlightSim/IFlightSimMessageHandler.cs b/SimConnect/ISimConnectMessageHandler.cs similarity index 58% rename from FlightSim/IFlightSimMessageHandler.cs rename to SimConnect/ISimConnectMessageHandler.cs index ea8c899..d53b842 100644 --- a/FlightSim/IFlightSimMessageHandler.cs +++ b/SimConnect/ISimConnectMessageHandler.cs @@ -1,8 +1,8 @@ using System; -namespace fs2ff.FlightSim +namespace fs2ff.SimConnect { - public interface IFlightSimMessageHandler : IDisposable + public interface ISimConnectMessageHandler : IDisposable { public void ReceiveFlightSimMessage(); public IntPtr WindowHandle { set; } diff --git a/FlightSim/REQUEST.cs b/SimConnect/REQUEST.cs similarity index 91% rename from FlightSim/REQUEST.cs rename to SimConnect/REQUEST.cs index 82bd9bf..4be6a57 100644 --- a/FlightSim/REQUEST.cs +++ b/SimConnect/REQUEST.cs @@ -1,7 +1,7 @@ // ReSharper disable InconsistentNaming // ReSharper disable UnusedMember.Global -namespace fs2ff.FlightSim +namespace fs2ff.SimConnect { public enum REQUEST : uint { diff --git a/FlightSim/FlightSimAdapter.cs b/SimConnect/SimConnectAdapter.cs similarity index 89% rename from FlightSim/FlightSimAdapter.cs rename to SimConnect/SimConnectAdapter.cs index 6688288..dd7026e 100644 --- a/FlightSim/FlightSimAdapter.cs +++ b/SimConnect/SimConnectAdapter.cs @@ -7,16 +7,17 @@ using System.Threading.Tasks; using fs2ff.Models; using Microsoft.FlightSimulator.SimConnect; +using SimConnectImpl = Microsoft.FlightSimulator.SimConnect.SimConnect; -namespace fs2ff.FlightSim +namespace fs2ff.SimConnect { - public class FlightSimAdapter : IDisposable + public class SimConnectAdapter : IDisposable { private const string AppName = "fs2ff"; private const uint WM_USER_SIMCONNECT = 0x0402; private Timer? _attitudeTimer; - private SimConnect? _simConnect; + private SimConnectImpl? _simConnect; public event Func? AttitudeReceived; public event Func? PositionReceived; @@ -34,7 +35,7 @@ public void Connect(IntPtr hwnd, uint attitudeFrequency) _simConnect?.Dispose(); _attitudeTimer?.Dispose(); - _simConnect = new SimConnect(AppName, hwnd, WM_USER_SIMCONNECT, null, 0); + _simConnect = new SimConnectImpl(AppName, hwnd, WM_USER_SIMCONNECT, null, 0); _attitudeTimer = new Timer(RequestAttitudeData, null, 100, 1000 / attitudeFrequency); SubscribeEvents(); @@ -72,7 +73,7 @@ public void SetAttitudeFrequency(uint frequency) private void AddToDataDefinition(DEFINITION defineId, string datumName, string? unitsName, SIMCONNECT_DATATYPE datumType = SIMCONNECT_DATATYPE.FLOAT64) { - _simConnect?.AddToDataDefinition(defineId, datumName, unitsName, datumType, 0, SimConnect.SIMCONNECT_UNUSED); + _simConnect?.AddToDataDefinition(defineId, datumName, unitsName, datumType, 0, SimConnectImpl.SIMCONNECT_UNUSED); } private void DisconnectInternal(bool failure) @@ -130,7 +131,7 @@ private void RequestAttitudeData(object? _) { _simConnect?.RequestDataOnSimObject( REQUEST.Attitude, DEFINITION.Attitude, - SimConnect.SIMCONNECT_OBJECT_ID_USER, + SimConnectImpl.SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_PERIOD.ONCE, SIMCONNECT_DATA_REQUEST_FLAG.DEFAULT, 0, 0, 0); @@ -141,12 +142,12 @@ private void RequestAttitudeData(object? _) } } - private void SimConnect_OnRecvEventObjectAddremove(SimConnect sender, SIMCONNECT_RECV_EVENT_OBJECT_ADDREMOVE data) + private void SimConnect_OnRecvEventObjectAddremove(SimConnectImpl sender, SIMCONNECT_RECV_EVENT_OBJECT_ADDREMOVE data) { if (data.uEventID == (uint) EVENT.ObjectAdded && (data.eObjType == SIMCONNECT_SIMOBJECT_TYPE.AIRCRAFT || data.eObjType == SIMCONNECT_SIMOBJECT_TYPE.HELICOPTER) && - data.dwData != SimConnect.SIMCONNECT_OBJECT_ID_USER) + data.dwData != SimConnectImpl.SIMCONNECT_OBJECT_ID_USER) { _simConnect?.RequestDataOnSimObject( REQUEST.TrafficObjectBase + data.dwData, @@ -157,13 +158,13 @@ private void SimConnect_OnRecvEventObjectAddremove(SimConnect sender, SIMCONNECT } } - private void SimConnect_OnRecvException(SimConnect sender, SIMCONNECT_RECV_EXCEPTION data) + private void SimConnect_OnRecvException(SimConnectImpl sender, SIMCONNECT_RECV_EXCEPTION data) { Console.Error.WriteLine("Exception caught: " + data.dwException); DisconnectInternal(true); } - private void SimConnect_OnRecvOpen(SimConnect sender, SIMCONNECT_RECV data) + private void SimConnect_OnRecvOpen(SimConnectImpl sender, SIMCONNECT_RECV data) { RegisterPositionStruct(); RegisterAttitudeStruct(); @@ -171,7 +172,7 @@ private void SimConnect_OnRecvOpen(SimConnect sender, SIMCONNECT_RECV data) _simConnect?.RequestDataOnSimObject( REQUEST.Position, DEFINITION.Position, - SimConnect.SIMCONNECT_OBJECT_ID_USER, + SimConnectImpl.SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_PERIOD.SECOND, SIMCONNECT_DATA_REQUEST_FLAG.DEFAULT, 0, 0, 0); @@ -183,12 +184,12 @@ private void SimConnect_OnRecvOpen(SimConnect sender, SIMCONNECT_RECV data) _simConnect?.SubscribeToSystemEvent(EVENT.SixHz, "6Hz"); } - private void SimConnect_OnRecvQuit(SimConnect sender, SIMCONNECT_RECV data) + private void SimConnect_OnRecvQuit(SimConnectImpl sender, SIMCONNECT_RECV data) { DisconnectInternal(false); } - private async void SimConnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA data) + private async void SimConnect_OnRecvSimobjectData(SimConnectImpl sender, SIMCONNECT_RECV_SIMOBJECT_DATA data) { if (data.dwRequestID == (uint) REQUEST.Position && data.dwDefineID == (uint) DEFINITION.Position && @@ -206,19 +207,19 @@ private async void SimConnect_OnRecvSimobjectData(SimConnect sender, SIMCONNECT_ if (data.dwRequestID == (uint) REQUEST.TrafficObjectBase + data.dwObjectID && data.dwDefineID == (uint) DEFINITION.Traffic && - data.dwObjectID != SimConnect.SIMCONNECT_OBJECT_ID_USER && + data.dwObjectID != SimConnectImpl.SIMCONNECT_OBJECT_ID_USER && data.dwData?.FirstOrDefault() is Traffic tfk) { await TrafficReceived.RaiseAsync(tfk, data.dwObjectID).ConfigureAwait(false); } } - private void SimConnect_OnRecvSimobjectDataBytype(SimConnect sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data) + private void SimConnect_OnRecvSimobjectDataBytype(SimConnectImpl sender, SIMCONNECT_RECV_SIMOBJECT_DATA_BYTYPE data) { if ((data.dwRequestID == (uint) REQUEST.TrafficAircraft || data.dwRequestID == (uint) REQUEST.TrafficHelicopter) && data.dwDefineID == (uint) DEFINITION.Traffic && - data.dwObjectID != SimConnect.SIMCONNECT_OBJECT_ID_USER) + data.dwObjectID != SimConnectImpl.SIMCONNECT_OBJECT_ID_USER) { _simConnect?.RequestDataOnSimObject( REQUEST.TrafficObjectBase + data.dwObjectID,