Я впервые использую LUA и пытаюсь подписать функцию обратного вызова, которая будет выполняться при получении сигнала DBus.Я нашел несколько примеров того, как посылать сигналы DBus, используя lgi, но я не нашел ничего о том, как прослушать сигнал.Есть ли какой-нибудь пример по этому поводу?в документации lgi я его не нашел.
Спасибо
[EDIT]
На всякий случай это кому-то полезно, мне удалось подписаться на сигнал используяdbus_proxy (https://github.com/stefano-m/lua-dbus_proxy). Этот пример кода подписывается на сигнал, а затем выдает его, чтобы узнать, вызывается ли обратный вызов:
local lgi = require('lgi')
local GLib = lgi.GLib
local p = require('dbus_proxy')
local Bus = p.Bus
local Proxy = p.Proxy
local proxy = Proxy:new(
{
bus = Bus.SESSION,
name = "org.freedesktop.DBus",
path= "/org/freedesktop/DBus",
interface = "org.freedesktop.DBus"
}
)
local called = false
local received_proxy
local received_params
local function callback(proxy_obj, ...)
print('Hi!')
called = true
received_proxy = proxy_obj
received_params = {...}
end
local signal_name = "NameOwnerChanged"
local sender_name = nil -- any sender
proxy:connect_signal(callback, signal_name, sender_name)
local bus_name = "com.example.Test2"
local DBUS_NAME_FLAG_REPLACE_EXISTING = 2
proxy:RequestName(bus_name, DBUS_NAME_FLAG_REPLACE_EXISTING)
main_loop = GLib.MainLoop()
main_loop:run()
Я буду продолжать его изучать
Также,Я пытаюсь выяснить, как преобразовать этот код Python для передачи сигнала dbus в LUA, используя lgi dbus:
class DBUSTestInterface(object):
"""
Server_XML definition.
Emit / Publish a signal that is a random integer every second
type='i' for integer.
"""
dbus = """
<node>
<interface name="com.test.device.aaa">
<signal name="get">
<arg type='s'/>
<arg type='s'/>
<arg type='s'/>
<arg type='s'/>
<arg type='s'/>
<arg type='s'/>
<arg type='s'/>
<arg type='i'/>
</signal>
</interface>
</node>
"""
get = signal()
emit = DBUSTestInterface()
bus.publish("com.test.device.get", emit)
Если вы можете привести какой-нибудь пример или указать, где я могу его найти, я был бы признателен!
Спасибо!