-/* $Id$ */
-
/***
This file is part of avahi.
Found,
Failure
}
-
+
internal enum BrowserEvent {
Added,
Removed,
this.error = error;
}
}
-
+
public enum Protocol {
Unspecified = -1,
IPv4 = 0,
Running,
Collision
}
-
+
public enum ClientState {
Registering = ServerState.Registering,
Running = ServerState.Running,
IgnoreUserConfig = 1,
NoFail = 2
}
-
+
public class Client : IDisposable
{
private IntPtr handle;
[DllImport ("avahi-client")]
private static extern int avahi_client_errno (IntPtr handle);
-
+
[DllImport ("avahi-common")]
private static extern IntPtr avahi_simple_poll_new ();
{
get { return handle; }
}
-
+
public string Version
{
get {
throw new ClientException (error);
thread = new Thread (PollLoop);
+ thread.IsBackground = true;
thread.Start ();
}
if (handle != IntPtr.Zero) {
lock (this) {
avahi_client_free (handle);
+ handle = IntPtr.Zero;
+
avahi_simple_poll_quit (spoll);
+ Monitor.Wait (this);
+
avahi_simple_poll_free (spoll);
- handle = IntPtr.Zero;
}
}
}
IntPtr namePtr = Stdlib.malloc ((ulong) len);
IntPtr typePtr = Stdlib.malloc ((ulong) len);
IntPtr domainPtr = Stdlib.malloc ((ulong) len);
-
+
int ret = avahi_service_name_split (Utility.StringToBytes (service), namePtr, len, typePtr, len,
domainPtr, len);
Utility.Free (namePtr);
Utility.Free (typePtr);
Utility.Free (domainPtr);
-
+
name = null;
type = null;
domain = null;
if (error != ErrorCode.Ok)
throw new ClientException (error);
}
-
+
private void OnClientCallback (IntPtr client, ClientState state, IntPtr userData)
{
if (StateChanged != null)
try {
lock (this) {
avahi_simple_poll_loop (spoll);
+ Monitor.Pulse (this);
}
} catch (Exception e) {
Console.Error.WriteLine ("Error in avahi-sharp event loop: " + e);