private UDPTelemetryData Deserialize(byte[] rawData) { GCHandle telemetryHandle = GCHandle.Alloc(rawData.ToArray(), GCHandleType.Pinned); try { UDPTelemetryData udpTelemetry = (UDPTelemetryData)Marshal.PtrToStructure(telemetryHandle.AddrOfPinnedObject(), typeof(UDPTelemetryData)); return(udpTelemetry); } finally { telemetryHandle.Free(); } }
public async Task ReceiveLoop(Action <UDPTelemetryData> handler, CancellationToken cancellationToken) { while (!cancellationToken.IsCancellationRequested) { UdpReceiveResult receiveResult = await _udpReceiver.Receive(cancellationToken); if (!IsCorrectPackageType(receiveResult.Buffer)) { continue; } UDPTelemetryData telemetryData = Deserialize(receiveResult.Buffer); handler(telemetryData); } }
private void OnNewUdpData(UDPTelemetryData data) { _pCars2DataConvertor.UdpTelemetryData = data; }