コード例 #1
0
        /// <summary>
        /// Callback for when a device is added.
        /// </summary>
        private void OnServiceAdded(object sender, ServiceAnnouncementEventArgs e)
        {
            if (e == null || e.Announcement == null || e.Announcement.Addresses == null || e.Announcement.Txt == null ||
                discoveredDevices == null)
            {
                return;
            }

            var discoveredDevice = new DiscoveredDevice
            {
                IPAddress = e.Announcement.Addresses[0].ToString(),
                Protocol  = e.Announcement.Type,
                Port      = e.Announcement.Port,
                Name      = e.Announcement.Txt.Where(x => x.ToString().StartsWith("fn=")).FirstOrDefault()?.Replace("fn=", ""),
                Headers   = JsonConvert.SerializeObject(e.Announcement.Txt),
                Usn       = e.Announcement.Hostname,
                Id        = e.Announcement.Txt.Where(x => x.ToString().StartsWith("id=")).FirstOrDefault()?.Replace("id=", ""),
            };

            if (discoveredDevice.Name != null &&
                discoveredDevice.Usn != null &&
                discoveredDevice.Headers != null &&
                (discoveredDevice.Protocol.IndexOf(serviceType) >= 0 ||
                 discoveredDevice.Protocol.IndexOf(serviceTypeEmbedded) >= 0))
            {
                discoveredDevices.Add(discoveredDevice);
            }
        }
コード例 #2
0
 private void OnServiceAdded(object sender, ServiceAnnouncementEventArgs e)
 {
     ServiceAddedSemaphoreSlim.Wait();
     try
     {
         var txtValues = e.Announcement.Txt
                         .Select(i => i.Split('='))
                         .ToDictionary(y => y[0], y => y[1]);
         if (!txtValues.ContainsKey("fn"))
         {
             return;
         }
         var ip = e.Announcement.Addresses[0];
         Uri.TryCreate("https://" + ip, UriKind.Absolute, out Uri myUri);
         var chromecast = new ChromecastReceiver
         {
             DeviceUri        = myUri,
             Name             = txtValues["fn"],
             Model            = txtValues["md"],
             Version          = txtValues["ve"],
             ExtraInformation = txtValues,
             Status           = txtValues["rs"],
             Port             = e.Announcement.Port
         };
         ChromecastReceivedFound?.Invoke(this, chromecast);
         DiscoveredDevices.Add(chromecast);
     }
     finally
     {
         ServiceAddedSemaphoreSlim.Release();
     }
 }
コード例 #3
0
        private void onServiceAdded(object sender, ServiceAnnouncementEventArgs e)
        {
            ServiceAnnouncement service = e.Announcement;
            mDNSObject          mDNS    = new mDNSObject();

            mDNS.Type = (service.Type == "_https._tcp") ? "https" : "http";
            mDNS.Name = service.Instance;
            foreach (string txt in service.Txt)
            {
                if (txt.Contains("uuid"))
                {
                    mDNS.Txt = txt;
                }
            }
            foreach (IPAddress ipaddr in service.Addresses)
            {
                if (ipaddr.AddressFamily.ToString() == ProtocolFamily.InterNetwork.ToString()) // IPv4
                {
                    mDNS.Address = ipaddr.ToString();
                }
            }
            if (mDNS.Address == "")
            {
                return;
            }
            mDNS.Port = service.Port;
            services.Add(mDNS);
            cboxDevice.Items.Add(mDNS.Name);
        }
コード例 #4
0
        private void OnServiceAdded(object sender, ServiceAnnouncementEventArgs e)
        {
            var detectedVent = new Ventilator
            {
                IP = e.Announcement.Addresses.First().ToString(),
            };

            foreach (var txt in e.Announcement.Txt)
            {
                var split = txt.Split('=');
                var id    = split[0];
                if (id == "fn")
                {
                    detectedVent.Name = split[1];
                }
            }

            bool found = false;

            foreach (var disc in FoundVentilators)
            {
                if (disc.IP == detectedVent.IP)
                {
                    found = true;
                    break;
                }
            }

            if (!found)
            {
                FoundVentilators.Add(detectedVent);
            }
        }
コード例 #5
0
        private void onServiceAdded(object sender, ServiceAnnouncementEventArgs e)
        {
            // ignore other services
            if (e.Announcement.Instance != this.serviceName)
            {
                return;
            }

            // debug
            debugAnnouncement("Service added:", e.Announcement);

            // create entry
            var dev = new Device()
            {
                Addresses = e.Announcement.Addresses,
                Port      = e.Announcement.Port,
            };

            // build device info
            foreach (var txt in e.Announcement.Txt)
            {
                var tokens = txt.Split('=');
                if (tokens.Length == 2)
                {
                    switch (tokens[0])
                    {
                    case "hwid":
                        dev.UniqueID = tokens[1].Replace(" ", "").ToUpper();
                        break;

                    case "type":
                        dev.ConsoleType = tokens[1];
                        break;

                    case "region":
                        dev.ConsoleRegion = tokens[1];
                        break;
                    }
                }
            }

            // check to avoid adding duplicate devices
            foreach (var a in Available)
            {
                if (dev.Addresses.SequenceEqual(e.Announcement.Addresses))
                {
                    Trace.WriteLine("Duplicate announce for addresses: " + string.Join(", ", e.Announcement.Addresses));
                    return;
                }
                if (dev.UniqueID == a.UniqueID)
                {
                    Trace.WriteLine("Duplicate announce for same device: " + a.UniqueID);
                    return;
                }
            }

            Available.Add(dev);
        }
コード例 #6
0
        void OnService(object sender, ServiceAnnouncementEventArgs e)
        {
            string hostName = e.Announcement.Hostname + ".local";

            if (_tcss.TryGetValue(hostName, out TaskCompletionSource <string> tcs))
            {
                tcs.SetResult("http://" + e.Announcement.Addresses.First());
            }
        }
コード例 #7
0
 private void onServiceChanged(object sender, ServiceAnnouncementEventArgs e)
 {
     // silently ignore other services
     if (e.Announcement.Instance != this.serviceName)
     {
         return;
     }
     debugAnnouncement("A service changed:", e.Announcement);
 }
コード例 #8
0
ファイル: DiscoveryManager.cs プロジェクト: t-l-k/IOWrapper
        private void OnServiceRemoved(object sender, ServiceAnnouncementEventArgs e)
        {
            var deviceInfo = FindDeviceInfo(e.Announcement.Hostname);

            if (deviceInfo != null)
            {
                DeviceInfos.Remove(deviceInfo.DeviceReport.DeviceName);
            }
        }
コード例 #9
0
 void OnServiceChanged(object sender, ServiceAnnouncementEventArgs e)
 {
     var item = _serviceList.FirstOrDefault(i => i.Hostname == e.Announcement.Hostname);
     if (item != null)
     {
         item = e.Announcement;
     }
     printService('~', e.Announcement);
 }
コード例 #10
0
        private void OnServiceAdded(object sender, ServiceAnnouncementEventArgs e)
        {
            var addresses = MulticastService.GetIPAddresses()
                            .Where(ip => ip.AddressFamily == AddressFamily.InterNetwork);

            if (!addresses.Contains(e.Announcement.Addresses?[0])) // Not a query from a local IP address
            {
                logger.Log($"Service added: {e.Announcement.Addresses?[0]} {e.Announcement.Txt.Where(x => x.StartsWith("fn=")).FirstOrDefault()?.ToString().Replace("fn=", "")} - {e.Announcement.Instance} {e.Announcement.Type}");
            }
        }
コード例 #11
0
        private void MDnsDiscovery_ServiceAdded(object sender, ServiceAnnouncementEventArgs e)
        {
            if (CancelSsdpDiscoveryOnMDns)
            {
                ssdpCancellation.Cancel();
            }

            var report = ParseServiceAnnouncement(e.Announcement);

            Trace.WriteLine(report);
            OnDeviceDiscovered(new DeviceDiscoveryEventArgs(report));
        }
コード例 #12
0
        private void onServiceAdded(object sender, ServiceAnnouncementEventArgs e)
        {
            if (!UserSettings.HasSettings() || !UserSettings.Settings.Devices.Any(d => d.IPAddress.Equals(e.Announcement.Addresses.First().ToString())))
            { //Only add devices that not have been added before
                _logger.Info($"Discovered following device: {e.Announcement.Hostname}, IPs: {e.Announcement.Addresses}, Port: {e.Announcement.Port}");

                discoveredDevices.Add(new Device {
                    Name = e.Announcement.Hostname, IPAddress = e.Announcement.Addresses.First().ToString(), Port = e.Announcement.Port
                });
            }

            BuildDeviceList();
        }
コード例 #13
0
        private void onServiceRemoved(object sender, ServiceAnnouncementEventArgs e)
        {
            ServiceAnnouncement service = e.Announcement;
            mDNSObject          mDNS    = new mDNSObject();

            mDNS = services.Find(x => x.Name == service.Instance);
            services.Remove(mDNS);
            cboxDevice.Items.Clear();
            foreach (mDNSObject mdns in services)
            {
                cboxDevice.Items.Add(mdns.Name);
            }
        }
コード例 #14
0
        private void OnServiceAdded(object sender, ServiceAnnouncementEventArgs e)
        {
            var serviceAgent = new ServiceAgent()
            {
                Hostname = e.Announcement.Hostname,
                Ip       = e.Announcement.Addresses[0],
                Port     = e.Announcement.Port
            };

            ServiceAgents.Add(serviceAgent);
            AgentAddedEvent?.Invoke(serviceAgent);
            printService('+', e.Announcement);
        }
コード例 #15
0
ファイル: DeviceDiscovery.cs プロジェクト: baenoinc/Bolt-App
        private async void OnServiceAdded(object sender, ServiceAnnouncementEventArgs e)
        {
            WLEDDevice toAdd = new WLEDDevice();

            foreach (var addr in e.Announcement.Addresses)
            {
                toAdd.NetworkAddress = addr.ToString(); break; //only get first address
            }
            toAdd.Name         = e.Announcement.Hostname;
            toAdd.NameIsCustom = false;
            if (await toAdd.Refresh()) //check if the service is a valid WLED light
            {
                OnValidDeviceFound(new DeviceCreatedEventArgs(toAdd, false));
            }
        }
コード例 #16
0
        private void OnServiceRemoved(object sender, ServiceAnnouncementEventArgs e)
        {
            IPAddress  id       = e.Announcement.Addresses.First();
            Ventilator toRemove = null;

            foreach (var disc in FoundVentilators)
            {
                if (IPAddress.Parse(disc.IP) == id)
                {
                    toRemove = disc;
                    break;
                }
            }
            if (toRemove != null)
            {
                FoundVentilators.Remove(toRemove);
            }
        }
コード例 #17
0
ファイル: DiscoveryManager.cs プロジェクト: t-l-k/IOWrapper
        private void OnServiceAdded(object sender, ServiceAnnouncementEventArgs e)
        {
            var serviceAgent = new ServiceAgent()
            {
                Hostname = e.Announcement.Hostname,
                Ip       = e.Announcement.Addresses[0],
                Port     = e.Announcement.Port
            };

            if (BuildDeviceReport(serviceAgent, out var report, out var descriptorMessage))
            {
                DeviceInfos.Add(e.Announcement.Hostname, new DeviceInfo()
                {
                    ServiceAgent      = serviceAgent,
                    DeviceReport      = report,
                    DescriptorMessage = descriptorMessage
                });
            }
        }
コード例 #18
0
        private void onServiceRemoved(object sender, ServiceAnnouncementEventArgs e)
        {
            // silently ignore other services
            if (e.Announcement.Instance != this.serviceName)
            {
                return;
            }
            debugAnnouncement("A service was removed:", e.Announcement);

            foreach (var a in Available)
            {
                if (a.Addresses.SequenceEqual(e.Announcement.Addresses))
                {
                    Available.Remove(a);
                    return;
                }
            }
            Trace.WriteLine("Service had not been detected before. Hmmm...");
        }
コード例 #19
0
        private void OnServiceAdded(object sender, ServiceAnnouncementEventArgs e)
        {
            var discoveredDevice = new DiscoveredDevice
            {
                IPAddress = e.Announcement.Addresses[0].ToString(),
                Protocol  = e.Announcement.Type,
                Port      = e.Announcement.Port,
                Name      = e.Announcement.Txt.Where(x => x.ToString().StartsWith("fn=")).FirstOrDefault()?.Replace("fn=", ""),
                Headers   = JsonConvert.SerializeObject(e.Announcement.Txt),
                Usn       = e.Announcement.Hostname
            };

            if (discoveredDevice.Name != null &&
                discoveredDevice.Usn != null &&
                discoveredDevice.Headers != null &&
                (discoveredDevice.Protocol.IndexOf("_googlecast._tcp") >= 0 ||
                 discoveredDevice.Protocol.IndexOf("_googlezone._tcp") >= 0))
            {
                discoveredDevices.Add(discoveredDevice);
            }
        }
コード例 #20
0
 /// <summary>
 /// Callback for when a device is removed.
 /// </summary>
 private void OnServiceRemoved(object sender, ServiceAnnouncementEventArgs e)
 {
     //TODO
 }
コード例 #21
0
 void OnServiceRemoved(object sender, ServiceAnnouncementEventArgs e)
 {
     if (_serviceList.Contains(e.Announcement))
         _serviceList.Remove(e.Announcement);
     printService('-', e.Announcement);
 }
コード例 #22
0
        private void ServiceBrowser_ServiceAdded(object sender, ServiceAnnouncementEventArgs e)
        {
            var id = Thread.CurrentThread.ManagedThreadId;

            _serviceAnnouncement = e.Announcement;
        }
コード例 #23
0
 void OnServiceAdded(object sender, ServiceAnnouncementEventArgs e)
 {
     if (!_serviceList.Contains(e.Announcement))
         _serviceList.Add(e.Announcement);
     printService('+', e.Announcement);
 }
コード例 #24
0
ファイル: Program.cs プロジェクト: voltagex/junkcode
 static void onServiceAdded(object sender, ServiceAnnouncementEventArgs e)
 {
     printService(e.Announcement);
 }
コード例 #25
0
 private void OnServiceChanged(object sender, ServiceAnnouncementEventArgs e)
 {
 }
コード例 #26
0
 private void MDnsDiscovery_ServiceChanged(object sender, ServiceAnnouncementEventArgs e)
 {
     Trace.WriteLine("Service changed.");
 }
コード例 #27
0
ファイル: Program.cs プロジェクト: andrasj/reachLocator
 static void onServiceAdded(object sender, ServiceAnnouncementEventArgs e)
 {
     addService(e.Announcement);
 }
コード例 #28
0
ファイル: Program.cs プロジェクト: andrasj/reachLocator
 static void onServiceRemoved(object sender, ServiceAnnouncementEventArgs e)
 {
 }
コード例 #29
0
 void onServiceRemoved(object sender, ServiceAnnouncementEventArgs e)
 {
     printService('-', e.Announcement);
 }
コード例 #30
0
 private void OnServiceAdded(object o, ServiceAnnouncementEventArgs e)
 {
     nanoleafFound.Add(e.Announcement.Addresses[0].ToString() + ":" + e.Announcement.Port);
 }
コード例 #31
0
ファイル: Configure.cs プロジェクト: NeoBelerophon/AmbiBeamCS
 private void BrowserOnServiceAdded(object sender, ServiceAnnouncementEventArgs serviceAnnouncementEventArgs)
 {
     cbNode.Items.Add(serviceAnnouncementEventArgs.Announcement.Hostname);
 }
コード例 #32
0
 void onServiceChanged(object sender, ServiceAnnouncementEventArgs e)
 {
     printService('~', e.Announcement);
 }
コード例 #33
0
 static void onServiceAdded(object sender, ServiceAnnouncementEventArgs e)
 {
     printService('+', e.Announcement);
 }
コード例 #34
0
 private void OnServiceRemoved(object sender, ServiceAnnouncementEventArgs e)
 {
     printService('+', e.Announcement);
 }