コード例 #1
0
ファイル: Bonjour.cs プロジェクト: SheffieldUni/growl-uos
        void service_Resolved(object o, ServiceResolvedEventArgs args)

        {
            IResolvableService service = args.Service;

            service.Resolved -= new ServiceResolvedEventHandler(service_Resolved);



            DestinationPlatformType fcPlatform = KnownDestinationPlatformType.Other;

            if (service.TxtRecord != null)

            {
                foreach (TxtRecordItem record in service.TxtRecord)

                {
                    if (record.Key == "platform")

                    {
                        string platform = record.ValueString;

                        fcPlatform = KnownDestinationPlatformType.FromString(platform);

                        break;
                    }
                }
            }

            BonjourEventArgs e = new BonjourEventArgs(fcPlatform);



            this.OnServiceFound(service, e);
        }
コード例 #2
0
ファイル: FindServer.cs プロジェクト: jcable/sif-mmm
    private static void OnServiceResolved(object o, ServiceResolvedEventArgs args)
    {
        IResolvableService service = o as IResolvableService;

        Console.Write("*** Resolved name = '{0}', port = '{1}', interface = '{2}'",
                      service.FullName, service.Port, service.NetworkInterface);
        foreach (System.Net.IPAddress j in service.HostEntry.AddressList)
        {
            Console.Write("host = '{0}'", j);
        }

        ITxtRecord record       = service.TxtRecord;
        int        record_count = record != null ? record.Count : 0;

        if (record_count > 0)
        {
            Console.Write(", TXT Record = [");
            for (int i = 0, n = record.Count; i < n; i++)
            {
                TxtRecordItem item = record.GetItemAt(i);
                Console.Write("{0} = '{1}'", item.Key, item.ValueString);
                if (i < n - 1)
                {
                    Console.Write(", ");
                }
            }
            Console.WriteLine("]");
        }
        else
        {
            Console.WriteLine("");
        }
    }
コード例 #3
0
        void broadcastService_ServiceRemoved(object sender, ServiceResolvedEventArgs e)
        {
            var repos = from r in this.Repos where r.Name == e.Service.Name && r.Host == e.Service.HostEntry.HostName select r;

            if (repos.Any())
            {
                this.Repos.Remove(repos.First());
            }
        }
コード例 #4
0
        private void OnServiceResolved(object o, ServiceResolvedEventArgs args)
        {
            IResolvableService service = o as IResolvableService;

            if (service == null)
            {
                return;
            }

            Log.DebugFormat("Resolved RAOP service at {0}", service.HostEntry.AddressList[0]);

            ITxtRecord record = service.TxtRecord;

            string version = String.Empty;
            int    sample_size = 16, sample_rate = 44100, channels = 2;

            for (int i = 0, n = record.Count; i < n; i++)
            {
                TxtRecordItem item = record.GetItemAt(i);
                switch (item.Key)
                {
                case "vs":
                    version = item.ValueString;
                    break;

                case "ss":
                    sample_size = Convert.ToInt32(item.ValueString);
                    break;

                case "sr":
                    sample_rate = Convert.ToInt32(item.ValueString);
                    break;

                case "ch":
                    channels = Convert.ToInt32(item.ValueString);
                    break;
                }
            }

            lock (speakers) {
                // TODO: better Name
                speakers.Add(new RemoteSpeaker(service.HostEntry.HostName,
                                               service.HostEntry.AddressList[0], service.Port,
                                               version, sample_rate, sample_size, channels));
            }

            EventHandler handler = SpeakersChanged;

            if (handler != null)
            {
                handler(this, EventArgs.Empty);
            }
        }
コード例 #5
0
        static void ServiceRemoved_Resolved(object o, ServiceResolvedEventArgs args)
        {
            if (browser != null)
            {
                System.Net.IPAddress[] addresses = args.Service.HostEntry.AddressList;
                string strUid = args.Service.TxtRecord["uid"].ValueString;
                int    uid    = int.Parse(strUid);

                lock (DiscoveredPeers)
                {
                    DiscoveredPeers.Remove(uid);
                }
            }
        }
コード例 #6
0
ファイル: ServiceLocator.cs プロジェクト: tcausby/giver
        private void OnServiceResolved(object o, ServiceResolvedEventArgs args)
        {
            IResolvableService service = o as IResolvableService;

            lock (locker) {
                if (services.ContainsKey(service.Name))
                {
                    // TODO: When making changes (like name or photo) at runtime becomes possible
                    // this should allow updates to this info
                    return;                     // we already have it somehow
                }
            }

            ServiceInfo serviceInfo = new ServiceInfo(service.Name, service.HostEntry.AddressList[0], (ushort)service.Port);

            ITxtRecord record = service.TxtRecord;

            serviceInfo.UserName      = record["User Name"].ValueString;
            serviceInfo.MachineName   = record["Machine Name"].ValueString;
            serviceInfo.Version       = record["Version"].ValueString;
            serviceInfo.PhotoType     = record["PhotoType"].ValueString;
            serviceInfo.PhotoLocation = record["Photo"].ValueString;

            Logger.Debug("Setting default photo");
            serviceInfo.Photo = Utilities.GetIcon("blankphoto", 48);

            lock (locker) {
                services[serviceInfo.Name] = serviceInfo;

                if (serviceInfo.PhotoType.CompareTo(Preferences.Local) == 0 ||
                    serviceInfo.PhotoType.CompareTo(Preferences.Gravatar) == 0 ||
                    serviceInfo.PhotoType.CompareTo(Preferences.Uri) == 0)
                {
                    // Queue the resolution of the photo
                    PhotoService.QueueResolve(serviceInfo);
                }
            }

            if (ServiceAdded != null)
            {
                Logger.Debug("About to call ServiceAdded");
                ServiceAdded(this, new ServiceArgs(serviceInfo));
                Logger.Debug("ServiceAdded was just called");
            }
            else
            {
                Logger.Debug("ServiceAdded was null and not called");
            }
        }
コード例 #7
0
        private void ServiceResolved(object o, ServiceResolvedEventArgs args)
        {
            var ip = args.Service.HostEntry.AddressList[0].ToString();

            lock (_lock)
            {
                //Dont add ITCan if its already present
                if (_cans.FirstOrDefault(d => d.Name == args.Service.Name) != null)
                {
                    return;
                }

                _cans.Add(new Can(ip, args.Service.Name));
                _subject.OnNext(_cans.ToArray());
            }
        }
コード例 #8
0
        private void OnResolved(object o, ServiceResolvedEventArgs args)
        {
            if (_instances.All(x => x.Name != args.Service.Name))
            {
                _instances.Add(new ProPresenterInstance
                {
                    Name = args.Service.Name,
                    Port = ((ushort)args.Service.Port).ToString(),
                    Ip   = args.Service.HostEntry.AddressList[0].ToString(),
                });

                OnProPresenterInstancesChanged?.Invoke(this, new ProPresenterInstancesChangedEventArgs {
                    Instances = _instances.ToList()
                });
            }
        }
コード例 #9
0
        void broadcastService_ServiceAdded(object sender, ServiceResolvedEventArgs e)
        {
            if (this.isPublished)
            {
                return;
            }

            var repo = IoC.Get <RepoViewModel>();

            repo.Name = e.Service.Name;
            repo.Port = (ushort)IPAddress.NetworkToHostOrder((short)e.Service.UPort);
            repo.Host = e.Service.HostEntry.HostName;

            if (!this.Repos.Where(r => r.Name == repo.Name).Any())
            {
                this.Repos.Add(repo);
            }
        }
コード例 #10
0
        private void OnServiceResolved(object o, ServiceResolvedEventArgs args)
        {
            IResolvableService s = (IResolvableService)args.Service;

            string name       = s.Name;
            string machine_id = null;
            bool   pwRequired = false;

            Console.WriteLine("Resolved Service: {0} - {1}:{2} ({3} TXT record entries)",
                              s.FullName, s.HostEntry.AddressList [0], s.Port, s.TxtRecord.Count);

            if (name.EndsWith("_PW"))
            {
                name       = name.Substring(0, name.Length - 3);
                pwRequired = true;
            }

            foreach (TxtRecordItem item in s.TxtRecord)
            {
                if (item.Key.ToLower() == "password")
                {
                    pwRequired = item.ValueString.ToLower() == "true";
                }
                else if (item.Key.ToLower() == "machine name")
                {
                    name = item.ValueString;
                }
                else if (item.Key.ToLower() == "machine id")
                {
                    machine_id = item.ValueString;
                }
            }

            DPAP.Service svc = new DPAP.Service(s.HostEntry.AddressList [0], (ushort)s.Port,
                                                name, pwRequired, machine_id);

            services [svc.Name] = svc;

            if (Found != null)
            {
                Found(this, new ServiceArgs(svc));
            }
        }
コード例 #11
0
        private void OnServiceResolved(object o, ServiceResolvedEventArgs args)
        {
            string             path    = "";
            IResolvableService service = o as IResolvableService;
            ITxtRecord         record  = service.TxtRecord;
            int record_count           = record != null ? record.Count : 0;

            if (record_count > 0)
            {
                for (int i = 0, n = record.Count; i < n; i++)
                {
                    TxtRecordItem item = record.GetItemAt(i);
                    if (item.Key.CompareTo("path") == 0)
                    {
                        path = item.ValueString;
                    }
                }
            }
            url = "http://" + service.HostEntry.AddressList[0] + ":" + service.Port + "/" + path;
            register();
        }
コード例 #12
0
        private static void OnServiceResolved(object o, ServiceResolvedEventArgs args)
        {
            var service = o as IResolvableService;

            Console.Write("*** Resolved name = '{0}', host ip = '{1}', hostname = {2}, port = '{3}', " +
                          "interface = '{4}', address type = '{5}'",
                          service.FullName,

                          // service.HostEntry.AddressList[0],
                          string.Join(", ", service.HostEntry.AddressList.Select(s => s.ToString()).ToArray()),
                          service.HostEntry.HostName,
                          service.Port,
                          service.NetworkInterface,
                          service.AddressProtocol);

            ITxtRecord record       = service.TxtRecord;
            int        record_count = record != null ? record.Count : 0;

            if (record_count > 0)
            {
                Console.Write(", TXT Record = [");
                for (int i = 0, n = record.Count; i < n; i++)
                {
                    TxtRecordItem item = record.GetItemAt(i);
                    Console.Write("{0} = '{1}'", item.Key, item.ValueString);
                    if (i < n - 1)
                    {
                        Console.Write(", ");
                    }
                }

                Console.WriteLine("]");
            }
            else
            {
                Console.WriteLine("");
            }
        }
コード例 #13
0
        private void OnServiceResolved(object o, ServiceResolvedEventArgs args)
        {
            string name = args.Service.Name;

            Log.DebugFormat("Managed to resolve DAAP share {0}.", args.Service.Name);

            bool password_required = false;

            // iTunes tacks this on to indicate a passsword protected share.  Ugh.
            if (name.EndsWith("_PW"))
            {
                name = name.Substring(0, name.Length - 3);
                password_required = true;
            }

            IResolvableService service = (IResolvableService)args.Service;

            foreach (TxtRecordItem item in service.TxtRecord)
            {
                if (item.Key.ToLower() == "password")
                {
                    password_required = item.ValueString.ToLower() == "true";
                }
                else if (item.Key.ToLower() == "machine name")
                {
                    name = item.ValueString;
                }
            }

            IPAddress address = args.Service.HostEntry.AddressList[0];

            Log.DebugFormat("OnServiceResolved provided {0}", address);

            // XXX: Workaround a Mono bug where we can't resolve IPv6 addresses properly
            if (services.ContainsKey(name) && address.AddressFamily == AddressFamily.InterNetworkV6)
            {
                // Only skip this service if it resolves to a IPv6 address, and we already have info
                // for this service already.
                Log.Debug("Skipping service", "already have IPv4 address.");
                return;
            }
            else if (!services.ContainsKey(name) && address.AddressFamily == AddressFamily.InterNetworkV6)
            {
                // This is the first address we've resolved, however, it's an IPv6 address.
                // Try and resolve the hostname in hope that it'll end up as an IPv4 address - it doesn't
                // really matter if it still ends up with an IPv6 address, we're not risking anything.

                foreach (IPAddress addr in Dns.GetHostEntry(args.Service.HostEntry.HostName).AddressList)
                {
                    if (addr.AddressFamily == AddressFamily.InterNetwork)
                    {
                        address = addr;
                    }
                }
            }

            Log.DebugFormat("Using address {0}", address);

            Daap.Service svc = new Daap.Service(address, (ushort)service.Port,
                                                name, password_required);

            if (services.ContainsKey(name))
            {
                services[name] = svc;
            }
            else
            {
                services.Add(name, svc);
            }

            if (Found != null)
            {
                Found(this, new ServiceArgs(svc));
            }
        }
コード例 #14
0
 void ZcBrowserServiceResolved(object o, ServiceResolvedEventArgs args)
 {
     AddFoundServiceFromScResolvedData(args.Service);
 }