Exemplo n.º 1
0
 public void Start()
 {
     try
     {
         Udp = new UdpClient(Port);
     }
     catch (Exception)
     {
         throw;
     }
     Running = true;
     Task.Run(async() =>
     {
         while (true)
         {
             var result = await Udp.ReceiveAsync().ConfigureAwait(false);
             UdpReceived?.Invoke(this, result);
             UdpReceiveBytes?.Invoke(this, result.Buffer);
             UdpReceiveString?.Invoke(this, Encoding.Default.GetString(result.Buffer));
         }
     });
 }
Exemplo n.º 2
0
        public async void FindDeviceAroundAsync()
        {
            try
            {
                List <Device> devicesFound = new List <Device>();
                while (true)
                {
                    devicesFound.Clear();

                    TaskCompletionSource <bool> gotMsg = new TaskCompletionSource <bool>();
                    UdpReceived ev = (remote, arg) =>
                    {
                        if (arg.Handled)
                        {
                            return;
                        }
                        var msg = arg.Mess;
                        if (msg.Type == MsgType.Info && msg.Pin == 100000)
                        {
                            devicesFound.Add(new Device {
                                Addr = remote.Address.ToString(), Name = msg.DeviceName, Time = DateTime.Now
                            });
                            gotMsg.SetResult(true);
                        }
                    };
                    OnUdpReceived += ev;

                    await gotMsg.Task;
                    OnUdpReceived -= ev;

                    OnDeviceFound?.Invoke(devicesFound);
                }
            }
            catch (OperationCanceledException)
            {
            }
        }