summaryrefslogtreecommitdiffstats
path: root/avahi-sharp/AvahiTest.cs
blob: 042bc28fa5a7f8ff2316a61229c2eef1078232cd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/* $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.
***/

using System;
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.HostName, 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);
	}
}