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")]