init. dbus registration works
This commit is contained in:
68
src/main/kotlin/net/eksb/obsdc/Main.kt
Normal file
68
src/main/kotlin/net/eksb/obsdc/Main.kt
Normal file
@@ -0,0 +1,68 @@
|
||||
package net.eksb.obsdc
|
||||
|
||||
import org.freedesktop.dbus.annotations.DBusInterfaceName
|
||||
import org.freedesktop.dbus.connections.impl.DBusConnection
|
||||
import org.freedesktop.dbus.connections.impl.DBusConnectionBuilder
|
||||
import org.freedesktop.dbus.interfaces.DBusInterface
|
||||
import org.freedesktop.dbus.interfaces.DBusSigHandler
|
||||
import org.freedesktop.dbus.messages.DBusSignal
|
||||
import org.slf4j.LoggerFactory
|
||||
|
||||
object Main {
|
||||
@JvmStatic
|
||||
fun main(args:Array<String>) {
|
||||
|
||||
DBusConnectionBuilder.forSessionBus().build().use { dbus ->
|
||||
|
||||
// These lines are not necessary to handle signals, but are necessary to register methods.
|
||||
dbus.requestBusName("net.eksb.obsdc")
|
||||
dbus.exportObject("/", ObsdcDBusInterfaceImpl())
|
||||
|
||||
dbus.addSigHandler<ObsdcDBusInterface.Signal> { signal -> log.info("signal: ${signal.message}") }
|
||||
while (true) {
|
||||
try {
|
||||
Thread.sleep(60_000)
|
||||
} catch (e:InterruptedException) {
|
||||
log.info("interrupted")
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
log.info("done")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
inline fun <reified T:DBusSignal> DBusConnection.addSigHandler(handler:DBusSigHandler<T>) {
|
||||
addSigHandler(T::class.java, handler)
|
||||
}
|
||||
|
||||
private val log = LoggerFactory.getLogger(Main::class.java)
|
||||
|
||||
@DBusInterfaceName("net.eksb.Obsdc")
|
||||
interface ObsdcDBusInterface: DBusInterface {
|
||||
fun echo(message:String): String
|
||||
class Signal(path:String, val message:String): DBusSignal(path, message)
|
||||
}
|
||||
class ObsdcDBusInterfaceImpl: ObsdcDBusInterface {
|
||||
override fun echo(message: String):String {
|
||||
log.info("echo: ${message}")
|
||||
return message
|
||||
}
|
||||
override fun getObjectPath(): String = "/"
|
||||
}
|
||||
|
||||
/*
|
||||
Monitor:
|
||||
`dbus-monitor`
|
||||
|
||||
See what is registered:
|
||||
`qdbus net.eksb.obsdc /`
|
||||
|
||||
Send signal:
|
||||
`dbus-send --session --type=signal --dest=net.eksb.obsdc / net.eksb.Obsdc.Signal string:a`
|
||||
|
||||
Call method:
|
||||
`dbus-send --session --type=method_call --print-reply --dest=net.eksb.obsdc / net.eksb.Obsdc.echo string:b`
|
||||
`qdbus net.eksb.obsdc / net.eksb.Obsdc.echo hello`
|
||||
*/
|
||||
Reference in New Issue
Block a user