6e93994ff89a9651f956b0b302db461382baaa17
[rrq/lsp-utils.git] / lsp-dbus / lsp-dbus-events.lsp
1 ;; This newlisp module implements dbus socket send-receive together
2 ;; with signal receive.
3 ;
4 ; This should be included into the Dbus contect
5
6 (setf pending '())
7
8 (define 'RECV:RECV nil) ; Table of objects that receive calls/signals
9
10 (define (set-object PATH HANDLER) (RECV PATH HANDLER))
11
12 (define (process-signal DATA)
13   (let ((MSG (unpack-message "uuuuyya(yv)" DATA)))
14     ;; Determine object concerned
15     ;; Determine that object's handler for this signal
16     ;; Call the handler with signal data
17     ))
18
19 (define (send-recv--message MSG)
20   ;; Pack the message into a data block
21   (:send-message SYSTEM-SOCKET)
22   (while (unrelated (setf MSEG (:read-message SYSTEM-BUS )))
23     (push MSG pending -1))
24   MSG)
25
26 ;; The main-loop is intended as a prompt-handler so as to deal with
27 ;; asyncronous events
28 (define (main-loop)
29   (let ((FDS (list 0 (:%socket SYSTEM-BUS))))
30     (while (and (empty? pending) (not (member 0 (net-select FDS "r" -1))))
31       (if (pop pending) (process-signal $it)
32         (if (:read-message SYSTEM-BUS) (push $it pending -1)))
33       )))