(module vandusen-remote () (import chicken scheme) (require-library regex) (import irregex) (use extras srfi-13 vandusen tcp srfi-18 ports) (plugin 'remote (lambda () (let ((listener (tcp-listen ($ 'remote-port) (or ($ 'remote-backlog) 10) (or ($ 'remote-host) "localhost")))) (add-finalizer (lambda () (debug "finalizing remote listener") (tcp-close listener))) (thread-start! (lambda () (let loop () (receive (in out) (tcp-accept listener) (thread-start! (lambda () (port-for-each (lambda (line) (and-let* ((match (irregex-match '(seq (submatch (+ (~ space))) " " (submatch (+ any))) line))) (say (string-trim (irregex-match-substring match 2)) (irregex-match-substring match 1)))) (lambda () (read-line in))) (close-input-port in) (close-output-port out))) (loop)))))))))