예제 #1
0
        public async Task ReceiveLoop(CancellationToken cancellationToken)
        {
            while (!cancellationToken.IsCancellationRequested)
            {
                UdpReceiveResult receiveResult = await _udpReceiver.Receive(cancellationToken).ConfigureAwait(false);

                byte[]       rawPacked = receiveResult.Buffer;
                PacketHeader header    = DeserializePackedHeader(rawPacked);
                switch (header.MPacketId)
                {
                case 0:
                    PacketMotionData packetMotionData = Deserialize <PacketMotionData>(rawPacked);
                    _dataSetCompositor.ProcessPacket(packetMotionData);
                    break;

                case 1:
                    PacketSessionData packetSessionData = Deserialize <PacketSessionData>(rawPacked);
                    _dataSetCompositor.ProcessPacket(packetSessionData);
                    break;

                case 2:
                    PacketLapData packetLapData = Deserialize <PacketLapData>(rawPacked);
                    _dataSetCompositor.ProcessPacket(packetLapData);
                    break;

                case 3:
                    PacketEventData packetEventData = Deserialize <PacketEventData>(rawPacked);
                    _dataSetCompositor.ProcessPacket(packetEventData);
                    break;

                case 4:
                    PacketParticipantsData packetParticipantsData = Deserialize <PacketParticipantsData>(rawPacked);
                    _dataSetCompositor.ProcessPacket(packetParticipantsData);
                    break;

                case 5:
                    PacketCarSetupData packetCarSetupData = Deserialize <PacketCarSetupData>(rawPacked);
                    _dataSetCompositor.ProcessPacket(packetCarSetupData);
                    break;

                case 6:
                    PacketCarTelemetryData packetCarTelemetryData = Deserialize <PacketCarTelemetryData>(rawPacked);
                    _dataSetCompositor.ProcessPacket(packetCarTelemetryData);
                    break;

                case 7:
                    PacketCarStatusData packetCarStatusData = Deserialize <PacketCarStatusData>(rawPacked);
                    _dataSetCompositor.ProcessPacket(packetCarStatusData);
                    break;
                }
            }
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        public void ReceiveNotifications()
        {
            new Thread(() =>
            {
                while (true)
                {
                    string[] message = Encoding.ASCII.GetString(UdpReceiver.Receive(ref remoteEndPoint)).Split(' ');
                    string request   = message[0];
                    Guid remoteGuid  = Guid.Parse(message[1]);

                    if (request == "add")
                    {
                        if (!copies.ContainsKey(remoteGuid))
                        {
                            copies[remoteGuid] = remoteEndPoint.Address;
                            Console.WriteLine(string.Join("\n",
                                                          GetJoinMessage(remoteGuid), CopiesCountMessage, CopiesListing, Parameters.Delimiters));
                        }

                        timeouts[remoteGuid] = 0;
                    }
                }
            }).Start();
        }
예제 #4
0
 private void Loop()
 {
     byteData = udp.Receive();
     messageQueue.Push(byteData);
     System.Threading.Thread.Sleep(1);
 }