Esempio n. 1
0
        private void Broadcast()
        {
            UdpClient client = new UdpClient();

            client.AllowNatTraversal(true);
            client.EnableBroadcast = true;

            while (!tokenSource.IsCancellationRequested)
            {
                CancellationTokenSource internalSource = new CancellationTokenSource();

                IPEndPoint serverEndpoint = new IPEndPoint(IPAddress.Any, Port);

                byte[] data = new byte[] { 0x00 };

                client.Send(data, data.Length, new IPEndPoint(IPAddress.Broadcast, Port));

                Task.Factory.StartNew(() =>
                {
                    client.Receive(ref serverEndpoint);
                    messageReceived.Set();
                }
                                      , internalSource.Token);

                if (messageReceived.WaitOne(PollingTime))
                {
                    ServerDiscoveredEventArgs args = new ServerDiscoveredEventArgs(serverEndpoint.Address.ToString(), new byte[] { 0x00 });
                    ServerDiscovered?.Invoke(this, args);
                }

                internalSource.Cancel();
            }
        }
 private void OnServerDiscoverd(object sender, ServerDiscoveredEventArgs args)
 {
     _discoveredServers.Add(args.ServerIp, args.DataQuantity);
 }