From 9b85b8ef05033db22128ec8773e17c871cdadada Mon Sep 17 00:00:00 2001 From: Ning Date: Tue, 12 Oct 2021 19:07:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B8=B8=E6=88=8F=E5=85=BC=E5=AE=B9=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E8=AF=86=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WpfApp1/DataHandle/DataReciver.cs | 16 +- WpfApp1/DataHandle/ShowDataHandle.cs | 2 - WpfApp1/DataHandle/TypeFactory.cs | 279 ++++++++++++++++----------- WpfApp1/F1Instrument.xaml.cs | 12 +- WpfApp1/Helper/MicroTimer.cs | 9 +- WpfApp1/MainWindow.xaml | 1 - WpfApp1/MainWindow.xaml.cs | 22 --- WpfApp1/Properties/AssemblyInfo.cs | 2 +- 8 files changed, 182 insertions(+), 161 deletions(-) diff --git a/WpfApp1/DataHandle/DataReciver.cs b/WpfApp1/DataHandle/DataReciver.cs index df4ea5d..c10a500 100644 --- a/WpfApp1/DataHandle/DataReciver.cs +++ b/WpfApp1/DataHandle/DataReciver.cs @@ -10,7 +10,7 @@ public static class DataReciver private static IPEndPoint IP; public static MicroTimer MicroTimer; private static int _port = 666; - private static GameVersion _version = GameVersion.F1_2020; + private static GameVersion _version = GameVersion.Unkonwn; static DataReciver() { @@ -28,7 +28,9 @@ private static void MicroTimer_OnRunningCallback(int id, int msg, int user, int var bytes = UDP.Receive(ref IP); if (bytes.Length > 0) { - var packet = TypeFactory.GetPacket(bytes, _version); + var packet = GetPacket(bytes, _version, out _version); + if (_version == GameVersion.Unkonwn) + return; ReciveEvent?.Invoke(packet); } } @@ -45,15 +47,7 @@ public static int Port } } - public static GameVersion Version - { - get => _version; - set - { - _version = value; - MicroTimer.Start(); - } - } + public static GameVersion Version => _version; public static void Dispose() { diff --git a/WpfApp1/DataHandle/ShowDataHandle.cs b/WpfApp1/DataHandle/ShowDataHandle.cs index 8eb8d77..a6f73a4 100644 --- a/WpfApp1/DataHandle/ShowDataHandle.cs +++ b/WpfApp1/DataHandle/ShowDataHandle.cs @@ -45,7 +45,6 @@ private static void Handle19(F1Instrument f1, Codemasters.F1_2019.Packet packet) var data = curPack.FieldCarStatusData[0]; f1.DRSEnable(data.DrsAllowed); - //f1.DRSNegative(data.DrsFailure); } } @@ -93,7 +92,6 @@ private static void Handle21(F1Instrument f1, Codemasters.F1_2021.Packet packet) var data = curPack.FieldCarStatusData[0]; f1.DRSEnable(data.DrsAllowed); - //f1.DRSNegative(data.DrsFailure); } } } diff --git a/WpfApp1/DataHandle/TypeFactory.cs b/WpfApp1/DataHandle/TypeFactory.cs index da4b319..ed20457 100644 --- a/WpfApp1/DataHandle/TypeFactory.cs +++ b/WpfApp1/DataHandle/TypeFactory.cs @@ -1,148 +1,197 @@ -using Codemasters.F1_2019; -using Codemasters.F1_2020; -using Codemasters.F1_2021; +using System; namespace F1Tools { public class TypeFactory { - public static object GetPacket(byte[] bytes, GameVersion version) + public static object GetPacket(byte[] bytes, GameVersion version, out GameVersion outVersion) { - switch (version) + if (version != GameVersion.Unkonwn) { - case GameVersion.F1_2019: - return GetPacket2019(bytes); - case GameVersion.F1_2020: - return GetPacket2020(bytes); - case GameVersion.F1_2021: - return GetPacket2021(bytes); - default: return null; + switch (version) + { + case GameVersion.F1_2019: + outVersion = GetPacket2019(bytes, out Codemasters.F1_2019.Packet packet19) ? GameVersion.F1_2019 : GameVersion.Unkonwn; + return packet19; + case GameVersion.F1_2020: + outVersion = GetPacket2020(bytes, out Codemasters.F1_2020.Packet packet20) ? GameVersion.F1_2020 : GameVersion.Unkonwn; + return packet20; + case GameVersion.F1_2021: + outVersion = GetPacket2021(bytes, out Codemasters.F1_2021.Packet packet21) ? GameVersion.F1_2021 : GameVersion.Unkonwn; + return packet21; + default: + outVersion = GameVersion.Unkonwn; + return null; + } + } + else + { + if (GetPacket2019(bytes, out Codemasters.F1_2019.Packet packet19)) + { + outVersion = GameVersion.F1_2019; + return packet19; + } + else if (GetPacket2020(bytes, out Codemasters.F1_2020.Packet packet20)) + { + outVersion = GameVersion.F1_2020; + return packet20; + } + else if (GetPacket2021(bytes, out Codemasters.F1_2021.Packet packet21)) + { + outVersion = GameVersion.F1_2021; + return packet21; + } + else + { + outVersion = GameVersion.Unkonwn; + return null; + } } } - public static Codemasters.F1_2019.Packet GetPacket2019(byte[] bytes) + public static bool GetPacket2019(byte[] bytes, out Codemasters.F1_2019.Packet packet) { - var type = Codemasters.F1_2019.CodemastersToolkit.GetPacketType(bytes); - - Codemasters.F1_2019.Packet pack = null; - switch (type) + packet = null; + try { - case Codemasters.F1_2019.PacketType.CarStatus: - pack = new Codemasters.F1_2019.CarStatusPacket(); - break; - case Codemasters.F1_2019.PacketType.CarTelemetry: - pack = new Codemasters.F1_2019.TelemetryPacket(); - break; - //case PacketType.FinalClassification: - // pack = new FinalClassificationPacket(); - // break; - //case PacketType.Lap: - // pack = new LapPacket(); - // break; - //case PacketType.LobbyInfo: - // pack = new LobbyInfoPacket(); - // break; - //case PacketType.Motion: - // pack = new MotionPacket(); - // break; - case Codemasters.F1_2019.PacketType.Participants: - pack = new Codemasters.F1_2019.ParticipantPacket(); - break; - //case PacketType.Session: - // pack = new SessionPacket(); - // break; - default: break; - } + var type = Codemasters.F1_2019.CodemastersToolkit.GetPacketType(bytes); + + switch (type) + { + case Codemasters.F1_2019.PacketType.CarStatus: + packet = new Codemasters.F1_2019.CarStatusPacket(); + break; + case Codemasters.F1_2019.PacketType.CarTelemetry: + packet = new Codemasters.F1_2019.TelemetryPacket(); + break; + //case PacketType.FinalClassification: + // pack = new FinalClassificationPacket(); + // break; + //case PacketType.Lap: + // pack = new LapPacket(); + // break; + //case PacketType.LobbyInfo: + // pack = new LobbyInfoPacket(); + // break; + //case PacketType.Motion: + // pack = new MotionPacket(); + // break; + case Codemasters.F1_2019.PacketType.Participants: + packet = new Codemasters.F1_2019.ParticipantPacket(); + break; + //case Codemasters.F1_2019.PacketType.Session: + // pack = new SessionPacket(); + // break; + default: break; + } - if (pack != null) - pack.LoadBytes(bytes); + if (packet != null) + packet.LoadBytes(bytes); - return pack; + return true; + } + catch (Exception ex) + { + return false; + } } - public static Codemasters.F1_2020.Packet GetPacket2020(byte[] bytes) + public static bool GetPacket2020(byte[] bytes, out Codemasters.F1_2020.Packet packet) { - var type = Codemasters.F1_2020.CodemastersToolkit.GetPacketType(bytes); - - Codemasters.F1_2020.Packet pack = null; - switch (type) + packet = null; + try { - case Codemasters.F1_2020.PacketType.CarStatus: - pack = new Codemasters.F1_2020.CarStatusPacket(); - break; - case Codemasters.F1_2020.PacketType.CarTelemetry: - pack = new Codemasters.F1_2020.TelemetryPacket(); - break; - //case PacketType.FinalClassification: - // pack = new FinalClassificationPacket(); - // break; - //case PacketType.Lap: - // pack = new LapPacket(); - // break; - //case PacketType.LobbyInfo: - // pack = new LobbyInfoPacket(); - // break; - //case PacketType.Motion: - // pack = new MotionPacket(); - // break; - case Codemasters.F1_2020.PacketType.Participants: - pack = new Codemasters.F1_2020.ParticipantPacket(); - break; - //case PacketType.Session: - // pack = new SessionPacket(); - // break; - default: break; - } + var type = Codemasters.F1_2020.CodemastersToolkit.GetPacketType(bytes); - if (pack != null) - pack.LoadBytes(bytes); + switch (type) + { + case Codemasters.F1_2020.PacketType.CarStatus: + packet = new Codemasters.F1_2020.CarStatusPacket(); + break; + case Codemasters.F1_2020.PacketType.CarTelemetry: + packet = new Codemasters.F1_2020.TelemetryPacket(); + break; + //case PacketType.FinalClassification: + // pack = new FinalClassificationPacket(); + // break; + //case PacketType.Lap: + // pack = new LapPacket(); + // break; + //case PacketType.LobbyInfo: + // pack = new LobbyInfoPacket(); + // break; + //case PacketType.Motion: + // pack = new MotionPacket(); + // break; + case Codemasters.F1_2020.PacketType.Participants: + packet = new Codemasters.F1_2020.ParticipantPacket(); + break; + //case PacketType.Session: + // pack = new SessionPacket(); + // break; + default: break; + } - return pack; + if (packet != null) + packet.LoadBytes(bytes); + return true; + } + catch (Exception ex) + { + return false; + } } - public static Codemasters.F1_2021.Packet GetPacket2021(byte[] bytes) + public static bool GetPacket2021(byte[] bytes, out Codemasters.F1_2021.Packet packet) { - var type = Codemasters.F1_2021.CodemastersToolkit.GetPacketType(bytes); - - Codemasters.F1_2021.Packet pack = null; - switch (type) + packet = null; + try { - case Codemasters.F1_2021.PacketType.CarStatus: - pack = new Codemasters.F1_2021.CarStatusPacket(); - break; - case Codemasters.F1_2021.PacketType.CarTelemetry: - pack = new Codemasters.F1_2021.TelemetryPacket(); - break; - //case PacketType.FinalClassification: - // pack = new FinalClassificationPacket(); - // break; - //case PacketType.Lap: - // pack = new LapPacket(); - // break; - //case PacketType.LobbyInfo: - // pack = new LobbyInfoPacket(); - // break; - //case PacketType.Motion: - // pack = new MotionPacket(); - // break; - case Codemasters.F1_2021.PacketType.Participants: - pack = new Codemasters.F1_2021.ParticipantPacket(); - break; - //case PacketType.Session: - // pack = new SessionPacket(); - // break; - default: break; - } + var type = Codemasters.F1_2021.CodemastersToolkit.GetPacketType(bytes); - if (pack != null) - pack.LoadBytes(bytes); + switch (type) + { + case Codemasters.F1_2021.PacketType.CarStatus: + packet = new Codemasters.F1_2021.CarStatusPacket(); + break; + case Codemasters.F1_2021.PacketType.CarTelemetry: + packet = new Codemasters.F1_2021.TelemetryPacket(); + break; + //case PacketType.FinalClassification: + // pack = new FinalClassificationPacket(); + // break; + //case PacketType.Lap: + // pack = new LapPacket(); + // break; + //case PacketType.LobbyInfo: + // pack = new LobbyInfoPacket(); + // break; + //case PacketType.Motion: + // pack = new MotionPacket(); + // break; + case Codemasters.F1_2021.PacketType.Participants: + packet = new Codemasters.F1_2021.ParticipantPacket(); + break; + //case PacketType.Session: + // pack = new SessionPacket(); + // break; + default: break; + } - return pack; + if (packet != null) + packet.LoadBytes(bytes); + + return true; + } + catch (Exception ex) + { + return false; + } } public enum GameVersion { - F1_2019, F1_2020, F1_2021 + F1_2019, F1_2020, F1_2021, Unkonwn } } } diff --git a/WpfApp1/F1Instrument.xaml.cs b/WpfApp1/F1Instrument.xaml.cs index b695440..62fe629 100644 --- a/WpfApp1/F1Instrument.xaml.cs +++ b/WpfApp1/F1Instrument.xaml.cs @@ -22,7 +22,7 @@ namespace F1Tools /// public partial class F1Instrument : UserControl { - private int Gear; + private int Gear = -1; private bool DRS_On = true; private bool DRS_Nev = true; private bool DRS_Ena = true; @@ -88,15 +88,11 @@ public partial class F1Instrument : UserControl public F1Instrument() { InitializeComponent(); - Gear = -1; SetDRS(false); DRSNegative(false); - - //img_cr.Source = new BitmapImage(new Uri("/Resources/cr.png", UriKind.Relative)); - //img_lb.Source = new BitmapImage(new Uri("/Resources/lable.png", UriKind.Relative)); - lb_DRS.Foreground = new SolidColorBrush(Colors.White); - DRSEnable(false); + lb_DRS.Foreground = new SolidColorBrush(Colors.White); + lb_R.Foreground = new SolidColorBrush(Colors.Gray); lb_N.Foreground = new SolidColorBrush(Colors.Gray); lb_1.Foreground = new SolidColorBrush(Colors.Gray); @@ -108,8 +104,8 @@ public F1Instrument() lb_7.Foreground = new SolidColorBrush(Colors.Gray); lb_8.Foreground = new SolidColorBrush(Colors.Gray); - //需要放在Foreground初始化后面,因为xml中设置的Foreground已经被冻结,无法应用动画 + DRSEnable(false); SetGear(0); } diff --git a/WpfApp1/Helper/MicroTimer.cs b/WpfApp1/Helper/MicroTimer.cs index f16cb8e..b9151fb 100644 --- a/WpfApp1/Helper/MicroTimer.cs +++ b/WpfApp1/Helper/MicroTimer.cs @@ -76,7 +76,14 @@ public MicroTimer(int dueTime, int period) /// private void TimerEventCallback(int id, int msg, int user, int param1, int param2) { - OnRunningCallback?.Invoke(id, msg, user, param1, param2); + try + { + OnRunningCallback?.Invoke(id, msg, user, param1, param2); + } + catch (Exception ex) + { + + } } /// diff --git a/WpfApp1/MainWindow.xaml b/WpfApp1/MainWindow.xaml index 041efe5..7333ed9 100644 --- a/WpfApp1/MainWindow.xaml +++ b/WpfApp1/MainWindow.xaml @@ -29,7 +29,6 @@ - diff --git a/WpfApp1/MainWindow.xaml.cs b/WpfApp1/MainWindow.xaml.cs index 60ce13a..004fee9 100644 --- a/WpfApp1/MainWindow.xaml.cs +++ b/WpfApp1/MainWindow.xaml.cs @@ -22,12 +22,7 @@ public partial class MainWindow : Window public MainWindow() { InitializeComponent(); - game_v.Items.Add("F1 2019"); - game_v.Items.Add("F1 2020"); - game_v.Items.Add("F1 2021"); - game_v.SelectedItem = "F1 2020"; - DataReciver.Version = TypeFactory.GameVersion.F1_2020; DataReciver.ReciveEvent += DataReciver_ReciveEvent; var ip = Helper.GetLocalIP(); lb_ip.Content = $"当前IP:{ip}"; @@ -153,22 +148,5 @@ private void Hyperlink_Click(object sender, RoutedEventArgs e) { System.Diagnostics.Process.Start("explorer.exe", "https://gitee.com/n-i-n-g/F1-2020-Telemetering-Tools/releases"); } - - private void game_v_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) - { - switch (game_v.SelectedItem as string) - { - case "F1 2019": - DataReciver.Version = TypeFactory.GameVersion.F1_2019; - break; - case "F1 2020": - DataReciver.Version = TypeFactory.GameVersion.F1_2020; - break; - case "F1 2021": - DataReciver.Version = TypeFactory.GameVersion.F1_2021; - break; - } - - } } } diff --git a/WpfApp1/Properties/AssemblyInfo.cs b/WpfApp1/Properties/AssemblyInfo.cs index c9f72a3..310204d 100644 --- a/WpfApp1/Properties/AssemblyInfo.cs +++ b/WpfApp1/Properties/AssemblyInfo.cs @@ -50,5 +50,5 @@ // //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 //通过使用 "*",如下所示: -[assembly: AssemblyVersion("2.4.2.0")] +[assembly: AssemblyVersion("2.4.3.0")] [assembly: AssemblyFileVersion("1.0.0.0")]