syndicate-rkt/syndicate/drivers/racket-event.rkt

28 lines
951 B
Racket
Raw Permalink Normal View History

2021-06-10 11:34:18 +00:00
#lang syndicate
;;; SPDX-License-Identifier: LGPL-3.0-or-later
2024-03-10 11:43:06 +00:00
;;; SPDX-FileCopyrightText: Copyright © 2021-2024 Tony Garnock-Jones <tonyg@leastfixedpoint.com>
2021-06-10 11:34:18 +00:00
;; Generic Racket events.
2021-07-01 07:40:52 +00:00
(provide (all-from-out syndicate/schemas/racketEvent))
2021-06-10 11:34:18 +00:00
(require syndicate/driver-support)
2021-07-01 07:40:52 +00:00
(require syndicate/schemas/racketEvent)
(require syndicate/schemas/dataspacePatterns)
2021-06-10 11:34:18 +00:00
(define-logger syndicate/drivers/racket-event)
2021-06-17 12:57:06 +00:00
(provide-service [ds]
(at ds
2024-04-09 12:00:33 +00:00
(during/spawn (Observe (:pattern (RacketEvent ,(Pattern-lit $embedded-event) ,_)) _)
2021-06-17 12:57:06 +00:00
#:name (embedded-value embedded-event)
(define event (embedded-value embedded-event))
(linked-thread
#:name (list event 'thread)
(lambda (facet)
(let loop ()
(sync (handle-evt event
(lambda args
(turn! facet (lambda () (send! ds (RacketEvent event args))))
(loop))))))))))