(module vandusen-remote () (import scheme) (import (chicken base) (chicken condition) (chicken irregex) (chicken io) (chicken tcp)) (import regex srfi-13 srfi-18) (import vandusen) (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 () (parameterize ((tcp-read-timeout 3000)) (let loop () (condition-case (receive (in out) (tcp-accept listener) (thread-start! (lambda () (dynamic-wind+ void (lambda () (let ((line (read-line in))) (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 () (close-input-port in) (close-output-port out))))) (loop)) (e (exn i/o net) (print-error-message e (current-error-port) "Error on tcp-accept") (flush-output (current-error-port)) (loop)))))))))) )