void OnUdpData(IAsyncResult result) { UdpClient socket = result.AsyncState as UdpClient; IPEndPoint source = new IPEndPoint(0, 0); byte[] message = socket.EndReceive(result, ref source); var ph = new PacketHeader(message); switch (ph.m_packetId) { //case 1: // var sessionData = new PacketSessionData(); // sessionData.RawData = ph.RawData; // sessionData.LoadData(); // break; case 2: var lapData = new PacketLapData(); lapData.RawData = ph.RawData; lapData.LoadData(); currentLap = lapData.m_lapData[lapData.m_header.m_playerCarIndex].m_currentLapNum.ToString(); var lastLapTS = TimeSpan.FromSeconds(lapData.m_lapData[lapData.m_header.m_playerCarIndex].m_lastLapTime); lastLap = $"{ lastLapTS.Minutes }:{ lastLapTS.Seconds }.{ lastLapTS.Milliseconds }"; if (lapData.m_lapData[lapData.m_header.m_playerCarIndex].m_lapDistance > 0) { if (lastLapDistance < 0) { //NEW LAP MediaPlayer.Play(larry); StartNewLap(); } else { var diff = lastLapDistance - lapData.m_lapData[lapData.m_header.m_playerCarIndex].m_lapDistance; if (diff > 1000) { //NEW LAP MediaPlayer.Play(larry); StartNewLap(); } } } if (currentLapTiming == null) { currentLapTiming = new List <Tuple <float, float> >(); } currentLapTiming.Add(new Tuple <float, float>(lapData.m_lapData[lapData.m_header.m_playerCarIndex].m_lapDistance, lapData.m_lapData[lapData.m_header.m_playerCarIndex].m_currentLapTime)); lastLapDistance = lapData.m_lapData[lapData.m_header.m_playerCarIndex].m_lapDistance; //lastLap = lapData.m_lapData[0].m_lapDistance //lastLap = lapData.m_lapData[0].m_lapDistance.ToString(); //Task.Run(() => WriteTextAsync(@"C:\Users\Andrew\Desktop\f1\output.txt", lapData.m_lapData[0].m_lapDistance.ToString() + Environment.NewLine)); packetCount++; break; case 6: var tele = new PacketCarTelemetryData(); tele.RawData = ph.RawData; tele.LoadData(); currentGear = tele.m_carTelemetryData[tele.m_header.m_playerCarIndex].m_gear.ToString(); currentRPM = tele.m_carTelemetryData[tele.m_header.m_playerCarIndex].m_engineRPM; var rpm = tele.m_carTelemetryData[tele.m_header.m_playerCarIndex].m_revLightsPercent; rpmPercent = rpm.ToString(); ledRPMStrip1 = false; ledRPMStrip2 = false; ledRPMStrip3 = false; if (rpm > 25) { ledRPMStrip1 = true; } if (rpm > 50) { ledRPMStrip2 = true; } if (rpm > 75) { ledRPMStrip3 = true; } //lastTelemetry = tele; break; } socket.BeginReceive(new AsyncCallback(OnUdpData), socket); }