Gestalt-based ground.rkt
This commit is contained in:
parent
2462c686ec
commit
7fc0875228
|
@ -1,5 +1,6 @@
|
||||||
#lang racket/base
|
#lang racket/base
|
||||||
|
|
||||||
|
(require racket/set)
|
||||||
(require racket/match)
|
(require racket/match)
|
||||||
(require racket/list)
|
(require racket/list)
|
||||||
(require "core.rkt")
|
(require "core.rkt")
|
||||||
|
@ -12,15 +13,18 @@
|
||||||
(define (event-handler descriptor)
|
(define (event-handler descriptor)
|
||||||
(handle-evt descriptor (lambda vs (send (event descriptor vs)))))
|
(handle-evt descriptor (lambda vs (send (event descriptor vs)))))
|
||||||
|
|
||||||
(define (extract-active-events routes)
|
(define event-projection (compile-gestalt-projection (event ?! ?)))
|
||||||
(filter-map (lambda (r)
|
|
||||||
(and (route-subscription? r)
|
(define (extract-active-events gestalt)
|
||||||
(zero? (route-meta-level r))
|
(define es (gestalt-project->finite-set gestalt 0 0 #f event-projection))
|
||||||
(zero? (route-level r))
|
;; TODO: how should the following error be handled, ideally?
|
||||||
(match (route-pattern r)
|
;; In principle, security restrictions should make it impossible.
|
||||||
[(event descriptor (? wildcard?)) (event-handler descriptor)]
|
;; But absent those, what should be done? Should an offending
|
||||||
[_ #f])))
|
;; process be identified and terminated?
|
||||||
routes))
|
(when (not es) (error 'extract-active-events "User program subscribed to wildcard event"))
|
||||||
|
(for/list [(ev (in-set es))]
|
||||||
|
(match-define (vector e) ev)
|
||||||
|
(event-handler e)))
|
||||||
|
|
||||||
(define idle-handler
|
(define idle-handler
|
||||||
(handle-evt (system-idle-evt) (lambda _ #f)))
|
(handle-evt (system-idle-evt) (lambda _ #f)))
|
||||||
|
@ -44,8 +48,8 @@
|
||||||
(await-interrupt #f (struct-copy process p [state new-state]) active-events)]
|
(await-interrupt #f (struct-copy process p [state new-state]) active-events)]
|
||||||
[(cons a actions)
|
[(cons a actions)
|
||||||
(match a
|
(match a
|
||||||
[(routing-update routes)
|
[(routing-update gestalt)
|
||||||
(process-actions actions (extract-active-events routes))]
|
(process-actions actions (extract-active-events gestalt))]
|
||||||
[(quit)
|
[(quit)
|
||||||
(log-info "run-ground: Terminating by request")
|
(log-info "run-ground: Terminating by request")
|
||||||
(void)]
|
(void)]
|
||||||
|
|
Loading…
Reference in New Issue