51 lines
1.8 KiB
Common Lisp
51 lines
1.8 KiB
Common Lisp
;;;; +----------------------------------------------------------------+
|
|
;;;; | DBUS |
|
|
;;;; +----------------------------------------------------------------+
|
|
(load (sb-ext:posix-getenv "ASDF"))
|
|
(asdf:load-system 'dbus)
|
|
(defpackage #:publish-example
|
|
(:use #:cl #:dbus)
|
|
(:export #:publish-example))
|
|
|
|
(in-package #:publish-example)
|
|
|
|
(define-dbus-object root
|
|
(:path "/"))
|
|
|
|
(define-dbus-object my-service
|
|
(:path "/org/adeht/MyService")
|
|
(:parent root))
|
|
|
|
(define-dbus-method (my-service my-method) ((s1 :string) (s2 :string)) (:string)
|
|
(:interface "org.adeht.MyService")
|
|
(format t "will process call for ~S and ~S~%" s1 s2)
|
|
(force-output)
|
|
(concatenate 'string "updated" s1 s2))
|
|
|
|
(define-dbus-signal-handler (my-service on-signal) ()
|
|
(:interface "org.adeht.MyService")
|
|
(format t "Got signal with arg ~S~%" "hoh")
|
|
(force-output))
|
|
|
|
(define-dbus-signal-handler (root on-signal) ((s :string))
|
|
(:interface "org.adeht.MyService")
|
|
(format t "Got signal on root with arg ~S~%" s)
|
|
(force-output))
|
|
|
|
(defun publish-example ()
|
|
(handler-case
|
|
(with-open-bus (bus (session-server-addresses))
|
|
(format t "Bus connection name: ~A~%" (bus-name bus))
|
|
(dbus:add-match bus :type :signal :interface "org.adeht.MyService")
|
|
(publish-objects bus))
|
|
(end-of-file ()
|
|
:disconnected-by-bus)))
|
|
|
|
;; was missing the 'add-match
|
|
;; and now let's try to catch the NotificationClosed tihngy
|
|
;; enefedov@LLF33A87M:~$ dbus-send --session --type=signal /org/adeht/MyService org.adeht.MyService.OnSignal string:"Hello yayyaline"
|
|
|
|
;; and when i do signal-handler on 'root
|
|
;; $ dbus-send --session --type=signal /org/adeht/MyService org.adeht.MyService.OnSignal ;; this is how to send it
|
|
;; so! i need to create it on the object path, ok
|