#lang syndicate/actor (require racket/cmdline) (require racket/set) (require "private/util.rkt") (require "protocol.rkt") (require/activate "config.rkt") (require/activate "hub/static-content.rkt") (require/activate "hub/topic-demand.rkt") (require/activate "hub/local-topic.rkt") (require/activate "hub/subscription.rkt") (command-line #:program "racketmq" #:once-each ["--canonical-host" host port "Specify the canonical host and port for this hub" (actor #:name (list 'command-line-canonical-host host port) (assert (config (list 'canonical-host host (string->number port)))))] #:multi [("-c" "--config") filename "Specify a configuration file to load" (spawn-configuration filename)]) (actor #:name 'main (during (config (list 'canonical-host $h $p)) (assert (canonical-local-host h p)) (assert (local-host h p))) (define/query-set canonical-local-hosts ($ c (canonical-local-host _ _)) c) (stop-when (rising-edge (> (set-count (canonical-local-hosts)) 1)) (log-error "Too many canonical-host records in configuration.")) ;; TODO: Make the too-many-canonical-host-records situation recoverable. ;; TODO: And/or, make the whole application quit when it gets into a bad state. (during (config (list 'accepted-host $h $p)) (assert (local-host h p))) (during (local-host $host-name $port) (assert (vh host-name port))))