Repository navigation
Expand file tree
/
Copy pathmini-server.lua
More file actions
66 lines (60 loc) · 1.76 KB
/
Copy pathmini-server.lua
File metadata and controls
66 lines (60 loc) · 1.76 KB
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
--
-- mini-server: a concise lsdbus server covering the core concepts
--
-- Demonstrates: typed method, readwrite property with validation and
-- emitPropertiesChanged, read-only property, signal, D-Bus error propagation.
-- See mini-client.lua for a matching proxy client.
--
-- busctl --user introspect lsdbus.mini /
-- busctl --user call lsdbus.mini / lsdbus.mini Hello s "Franz"
-- busctl --user get-property lsdbus.mini / lsdbus.mini GreetingCount
-- busctl --user set-property lsdbus.mini / lsdbus.mini Greeting s "Howdy"
-- busctl --user set-property lsdbus.mini / lsdbus.mini Greeting s ""
local lsdb = require("lsdbus")
local demo_if = {
name="lsdbus.mini",
methods={
Hello={
{ direction="in", name="what", type="s" },
{ direction="out", name="response", type="s" },
handler=function(vt, what)
local msg = (vt.greeting or "Hello").." "..what
print(msg)
vt.cnt = (vt.cnt or 0) + 1
vt:emit('Yell', vt.cnt, msg)
return msg
end
},
},
properties={
Greeting={
access="readwrite",
type="s",
get=function(vt) return vt.greeting or "Hello" end,
set=function(vt, val)
if val == "" then
error("org.freedesktop.DBus.Error.InvalidArgs|empty greeting not allowed") -- [expected] validation error
end
vt.greeting = val
vt:emitPropertiesChanged("Greeting")
end
},
GreetingCount={
access="read",
type="u",
get=function(vt) return vt.cnt or 0 end,
},
},
signals = {
Yell={
{ name="volume", type="u" },
{ name="message", type="s" }
},
}
}
local b = lsdb.open('user')
b:request_name("lsdbus.mini")
local vt = lsdb.server.new(b, "/", demo_if)
vt:emitAllPropertiesChanged()
local sig = b:add_signal(lsdb.SIGINT, function() b:exit_loop() end)
b:loop()