As an example here are a complete set of interfaces for the
bluemon24
daemon, which communicates over D-Bus. These interfaces were all created by querying
introspection data over the bus.
package cx.ath.matthew.bluemon;
import org.freedesktop.dbus.DBusInterface;
import org.freedesktop.dbus.UInt32;
public interface Bluemon extends DBusInterface
{
public Triplet<String, Boolean, UInt32>
Status(String address);
}
Figure 21:
cx/ath/matthew/bluemon/Bluemon.java
package cx.ath.matthew.bluemon;
import org.freedesktop.dbus.DBusInterface;
import org.freedesktop.dbus.DBusSignal;
import org.freedesktop.dbus.exceptions.DBusException;
public interface ProximitySignal extends DBusInterface
{
public static class Connect extends DBusSignal
{
public final String address;
public Connect(String path, String address)
throws DBusException
{
super(path, address);
this.address = address;
}
}
public static class Disconnect extends DBusSignal
{
public final String address;
public Disconnect(String path, String address)
throws DBusException
{
super(path, address);
this.address = address;
}
}
}
Figure 22:
cx/ath/matthew/bluemon/ProximitySignal.java
package cx.ath.matthew.bluemon;
import org.freedesktop.dbus.Tuple;
/** Just a typed container class */
public final class Triplet <A,B,C> extends Tuple
{
public final A a;
public final B b;
public final C c;
public Triplet(A a, B b, C c)
{
super(a, b, c);
this.a = a;
this.b = b;
this.c = c;
}
}
public class Client implements DBusSigHandler
{
public void handle(DBusSignal s)
{
if (s instanceof ProximitySignal.Connect)
System.out.println("Got a connect for "
+((ProximitySignal.Connect) s).address);
else if (s instanceof ProximitySignal.Disconnect)
System.out.println("Got a disconnect for "
+((ProximitySignal.Disconnect) s).address);
}
public static void main(String[] args)
{
System.out.println("Creating Connection");
DBusConnection conn = null;
try {
conn = DBusConnection
.getConnection(DBusConnection.SYSTEM);
} catch (DBusException DBe) {
System.out.println("Could not connect to bus");
System.exit(1);
}
try {
conn.addSigHandler(ProximitySignal.Connect.class,
new Client());
conn.addSigHandler(ProximitySignal.Disconnect.class,
new Client());
} catch (DBusException DBe) {
conn.disconnect();
System.exit(1);
}
}
}