syndicate-rkt/syndicate-examples/tcp-client.rkt

38 lines
1.5 KiB
Racket

#lang syndicate
;;; SPDX-License-Identifier: LGPL-3.0-or-later
;;; SPDX-FileCopyrightText: Copyright © 2021 Tony Garnock-Jones <tonyg@leastfixedpoint.com>
(module+ main
(require racket/cmdline)
(require (only-in racket/port read-line-evt))
(require syndicate/drivers/tcp)
(require syndicate/drivers/racket-event)
(define host "127.0.0.1")
(define port 5999)
(command-line #:once-each
[("--host" "-H") hostname "Set hostname to connect to"
(set! host hostname)]
[("--port" "-p") port-number "Set port number to connect to"
(set! port (string->number port-number))])
(actor-system/dataspace (ds)
(spawn-racket-event-driver ds)
(spawn-tcp-driver ds)
(spawn
(establish-connection
ds (TcpOutbound host port)
#:on-connected (lambda (peer)
(at ds
(when (message (RacketEvent (read-line-evt (current-input-port)) $vs))
(match (car vs)
[(? eof-object?)
(log-info "EOF on stdin.")
(stop-current-facet)]
[line
(send-data peer (string-append line "\n"))]))))
#:on-rejected (lambda (message) (stop-current-facet (log-error "~a" message)))
#:on-disconnected (lambda () (stop-current-facet (log-info "Disconnected")))
#:on-data display))))