]> git.meshlink.io Git - catta/blob - avahi-sharp/AvahiTest.cs
add new error codes and publish flags
[catta] / avahi-sharp / AvahiTest.cs
1 /* $Id$ */
2
3 /***
4     This file is part of avahi.
5
6     avahi is free software; you can redistribute it and/or modify it
7     under the terms of the GNU Lesser General Public License as
8     published by the Free Software Foundation; either version 2.1 of the
9     License, or (at your option) any later version.
10
11     avahi is distributed in the hope that it will be useful, but WITHOUT
12     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13     or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
14     Public License for more details.
15
16     You should have received a copy of the GNU Lesser General Public
17     License along with avahi; if not, write to the Free Software
18     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
19     USA.
20 ***/
21
22 using System;
23 using System.Collections;
24 using System.Text;
25 using System.Net;
26 using Avahi;
27
28 public class AvahiTest {
29     private static Client client;
30     private static ArrayList objects = new ArrayList ();
31
32     public static void Main () {
33         client = new Client ();
34
35         EntryGroup eg = new EntryGroup (client);
36         eg.StateChanged += OnEntryGroupChanged;
37         eg.AddService ("foobar2", "_daap._tcp", client.DomainName,
38                        444, new string[] { "foo", "bar", "baz" });
39         eg.Commit ();
40         Console.WriteLine ("Press enter to quit");
41         Console.ReadLine ();
42     }
43
44     private static void OnEntryGroupChanged (object o, EntryGroupState state)
45     {
46         Console.WriteLine ("Entry group status: " + state);
47         if (state == EntryGroupState.Established) {
48             DomainBrowser browser = new DomainBrowser (client);
49             objects.Add (browser);
50             
51             browser.DomainAdded += OnDomainAdded;
52         }
53     }
54
55     private static void OnDomainAdded (object o, DomainInfo info)
56     {
57         Console.WriteLine ("Got domain added: " + info.Domain);
58         BrowseServiceTypes (info.Domain);
59     }
60
61     private static void BrowseServiceTypes (string domain)
62     {
63         ServiceTypeBrowser stb = new ServiceTypeBrowser (client, domain);
64         objects.Add (stb);
65         
66         stb.CacheExhausted += OnCacheExhausted;
67         stb.ServiceTypeAdded += OnServiceTypeAdded;
68     }
69
70     private static void OnCacheExhausted (object o, EventArgs args)
71     {
72         Console.WriteLine ("Cache is exhausted");
73     }
74
75     private static void OnServiceTypeAdded (object o, ServiceTypeInfo info)
76     {
77         Console.WriteLine ("Got service type: " + info.ServiceType);
78         ServiceBrowser sb = new ServiceBrowser (client, info.ServiceType, info.Domain);
79         objects.Add (sb);
80         
81         sb.ServiceAdded += OnServiceAdded;
82     }
83
84     private static void OnServiceAdded (object o, ServiceInfo info)
85     {
86         // Console.WriteLine ("Got service: " + info.Name);
87         ServiceResolver resolver = new ServiceResolver (client, info);
88         objects.Add (resolver);
89         resolver.Found += OnServiceResolved;
90     }
91
92     private static void OnServiceResolved (object o, ServiceInfo info)
93     {
94         objects.Remove (o);
95         
96         Console.WriteLine ("Service '{0}' at {1}:{2}", info.Name, info.HostName, info.Port);
97         foreach (byte[] bytes in info.Text) {
98             Console.WriteLine ("Text: " + Encoding.UTF8.GetString (bytes));
99         }
100         AddressResolver ar = new AddressResolver (client, info.Address);
101         objects.Add (ar);
102         
103         ar.Found += OnAddressResolved;
104     }
105
106     private static void OnAddressResolved (object o, string host, IPAddress address)
107     {
108         objects.Remove (o);
109         
110         Console.WriteLine ("Resolved {0} to {1}", address, host);
111         HostNameResolver hr = new HostNameResolver (client, host);
112         objects.Add (hr);
113         
114         hr.Found += OnHostNameResolved;
115     }
116
117     private static void OnHostNameResolved (object o, string host, IPAddress address)
118     {
119         objects.Remove (o);
120         Console.WriteLine ("Resolved {0} to {1}", host, address);
121     }
122 }