X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-sharp%2FAvahiTest.cs;h=6ccfd57a46b8f036ba84b0a4e1476139150b5440;hb=7a5b2f69af7d36d6cd4153142f125fa011784e03;hp=7be4b0650867646caa96b8ba0c85295d87dd011c;hpb=223014183d626cd4cf6fb2cb7b17319375688138;p=catta diff --git a/avahi-sharp/AvahiTest.cs b/avahi-sharp/AvahiTest.cs index 7be4b06..6ccfd57 100644 --- a/avahi-sharp/AvahiTest.cs +++ b/avahi-sharp/AvahiTest.cs @@ -1,95 +1,131 @@ -/* $Id$ */ - /*** - This file is part of avahi. - - avahi is free software; you can redistribute it and/or modify it - under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation; either version 2.1 of the - License, or (at your option) any later version. - - avahi is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General - Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with avahi; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - USA. + This file is part of avahi. + + avahi is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + avahi is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General + Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with avahi; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. ***/ using System; +using System.Collections; using System.Text; using System.Net; -using Gtk; using Avahi; public class AvahiTest { - private static Client client; - - public static void Main () { - client = new Client (); - - EntryGroup eg = new EntryGroup (client); - eg.StateChanged += OnEntryGroupChanged; - eg.AddService ("foobar2", "_daap._tcp", client.DomainName, - 444, new string[] { "foo", "bar", "baz" }); - eg.Commit (); - - Application.Run (); - } - - private static void OnEntryGroupChanged (object o, EntryGroupState state) - { - Console.WriteLine ("Entry group status: " + state); - - if (state == EntryGroupState.Established) { - DomainBrowser browser = new DomainBrowser (client); - browser.DomainAdded += OnDomainAdded; - } - } - - private static void OnDomainAdded (object o, DomainInfo info) - { - Console.WriteLine ("Got domain added: " + info.Domain); - ServiceTypeBrowser stb = new ServiceTypeBrowser (client, info.Domain); - stb.ServiceTypeAdded += OnServiceTypeAdded; - } - - private static void OnServiceTypeAdded (object o, ServiceTypeInfo info) - { - Console.WriteLine ("Got service type: " + info.ServiceType); - ServiceBrowser sb = new ServiceBrowser (client, info.ServiceType, info.Domain); - sb.ServiceAdded += OnServiceAdded; - } - - private static void OnServiceAdded (object o, ServiceInfo info) - { - // Console.WriteLine ("Got service: " + info.Name); - ServiceResolver resolver = new ServiceResolver (client, info); - resolver.Found += OnServiceResolved; - } - - private static void OnServiceResolved (object o, ServiceInfo info) - { - Console.WriteLine ("Service '{0}' at {1}:{2}", info.Name, info.Host, info.Port); - foreach (byte[] bytes in info.Text) { - Console.WriteLine ("Text: " + Encoding.UTF8.GetString (bytes)); - } - AddressResolver ar = new AddressResolver (client, info.Address); - ar.Found += OnAddressResolved; - } - - private static void OnAddressResolved (object o, string host, IPAddress address) - { - Console.WriteLine ("Resolved {0} to {1}", address, host); - HostNameResolver hr = new HostNameResolver (client, host); - hr.Found += OnHostNameResolved; - } - - private static void OnHostNameResolved (object o, string host, IPAddress address) - { - Console.WriteLine ("Resolved {0} to {1}", host, address); - } + private static Client client; + private static ArrayList objects = new ArrayList (); + + public static void Main () { + client = new Client (); + + Console.WriteLine ("joined service name: " + Client.JoinServiceName ("FooBar", "_foo", "local")); + + EntryGroup eg = new EntryGroup (client); + eg.StateChanged += OnEntryGroupChanged; + eg.AddService ("foobar2", "_dingdong._tcp", client.DomainName, + 444, new string[] { "foo=stuff", "bar=stuff2", "baz=stuff3" }); + eg.Commit (); + BrowseServiceTypes ("local"); + Console.WriteLine ("Press enter to quit"); + Console.ReadLine (); + client.Dispose (); + } + + private static void OnEntryGroupChanged (object o, EntryGroupStateArgs args) + { + Console.WriteLine ("Entry group status: " + args.State); + if (args.State == EntryGroupState.Established) { + DomainBrowser browser = new DomainBrowser (client); + objects.Add (browser); + + browser.DomainAdded += OnDomainAdded; + } + } + + private static void OnDomainAdded (object o, DomainInfoArgs args) + { + Console.WriteLine ("Got domain added: " + args.Domain.Domain); + // BrowseServiceTypes (args.Domain.Domain); + } + + private static void BrowseServiceTypes (string domain) + { + ServiceTypeBrowser stb = new ServiceTypeBrowser (client, domain); + objects.Add (stb); + + stb.CacheExhausted += OnCacheExhausted; + stb.ServiceTypeAdded += OnServiceTypeAdded; + } + + private static void OnCacheExhausted (object o, EventArgs args) + { + Console.WriteLine ("Cache is exhausted"); + } + + private static void OnServiceTypeAdded (object o, ServiceTypeInfoArgs args) + { + Console.WriteLine ("Got service type: " + args.ServiceType.ServiceType); + ServiceBrowser sb = new ServiceBrowser (client, args.ServiceType.ServiceType, args.ServiceType.Domain); + objects.Add (sb); + + sb.ServiceAdded += OnServiceAdded; + } + + private static void OnServiceAdded (object o, ServiceInfoArgs args) + { + // Console.WriteLine ("Got service: " + info.Name); + ServiceResolver resolver = new ServiceResolver (client, args.Service); + objects.Add (resolver); + resolver.Found += OnServiceResolved; + } + + private static void OnServiceResolved (object o, ServiceInfoArgs args) + { + objects.Remove (o); + + Console.WriteLine ("Service '{0}' at {1}:{2}", args.Service.Name, args.Service.HostName, args.Service.Port); + foreach (byte[] bytes in args.Service.Text) { + Console.WriteLine ("Text: " + Encoding.UTF8.GetString (bytes)); + } + + AddressResolver ar = new AddressResolver (client, args.Service.Address); + objects.Add (ar); + + ar.Found += OnAddressResolved; + ar.Failed += OnAddressResolverFailed; + } + + private static void OnAddressResolverFailed (object o, ErrorCodeArgs args) + { + Console.WriteLine ("Failed to resolve '{0}': {1}", (o as AddressResolver).Address, args.ErrorCode); + } + + private static void OnAddressResolved (object o, HostAddressArgs args) + { + objects.Remove (o); + + Console.WriteLine ("Resolved {0} to {1}", args.Address, args.Host); + HostNameResolver hr = new HostNameResolver (client, args.Host); + objects.Add (hr); + + hr.Found += OnHostNameResolved; + } + + private static void OnHostNameResolved (object o, HostAddressArgs args) + { + objects.Remove (o); + Console.WriteLine ("Resolved {0} to {1}", args.Host, args.Address); + } }