예제 #1
0
 public Dialog(ConnectionModel model)
 {
     DataContext = model;
     InitializeComponent();
     worker = new DiscoveryWorker();
     logger = new ConnectionLogger(LogBox);
 }
예제 #2
0
        public StartupForm()
        {
            InitializeComponent();
            RefreshDevices();

            client = new UdpClient();
            var groupAddr = IPAddress.Parse("239.101.13.37");

            client.JoinMulticastGroup(groupAddr);
            client.EnableBroadcast = true;
            multicastEndpoint      = new IPEndPoint(groupAddr, 11111);

            names     = new Dictionary <long, string>();
            addresses = new Dictionary <long, IPEndPoint>();

            DiscoveryWorker.RunWorkerAsync();

            EmitBroadcastMessage();
        }
예제 #3
0
        private void DiscoveryWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            IPEndPoint remoteEndpoint = new IPEndPoint(IPAddress.Any, 50);

            while (true)
            {
                try
                {
                    byte[] data = client.Receive(ref remoteEndpoint);
                    if (data.Length >= 12)
                    {
                        try
                        {
                            var code = Encoding.ASCII.GetString(data.Take(3).ToArray());
                            if (code != "Hey")
                            {
                                continue;
                            }
                            var id   = BitConverter.ToInt64(data.Skip(3).Take(8).ToArray(), 0);
                            var name = Encoding.ASCII.GetString(data.Skip(11).ToArray());
                            names[id]     = name;
                            addresses[id] = remoteEndpoint;
                            DiscoveryWorker.ReportProgress(1);
                            DiscoveryWorker.ReportProgress(0);
                        }
                        catch
                        {
                            Console.WriteLine("got an invalid packet");
                            continue;
                        }
                    }
                }
                catch
                {
                    return;
                }
            }
        }