Split out tcp-client.rkt and tcp-echo-server.rkt
This commit is contained in:
parent
11eb0bcd6f
commit
2f4525b031
|
@ -0,0 +1,37 @@
|
|||
#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))))
|
|
@ -0,0 +1,23 @@
|
|||
#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 syndicate/drivers/tcp)
|
||||
|
||||
(define host "0.0.0.0")
|
||||
(define port 5999)
|
||||
|
||||
(command-line #:once-each
|
||||
[("--host" "-H") hostname "Set hostname to listen on"
|
||||
(set! host hostname)]
|
||||
[("--port" "-p") port-number "Set port number to listen on"
|
||||
(set! port (string->number port-number))])
|
||||
|
||||
(actor-system/dataspace (ds)
|
||||
(spawn-tcp-driver ds)
|
||||
(spawn
|
||||
(at ds
|
||||
(during/spawn (Connection $conn (TcpInbound host port))
|
||||
(accept-connection conn #:on-data (lambda (data) (send-data conn data))))))))
|
|
@ -159,55 +159,3 @@
|
|||
|
||||
(define (send-data conn data)
|
||||
(send! conn (Socket (if (bytes? data) data (string->bytes/utf-8 data)))))
|
||||
|
||||
(module+ main
|
||||
(require syndicate/drivers/timer)
|
||||
(require racket/cmdline)
|
||||
|
||||
(define (run-echo-server ds host port)
|
||||
(spawn
|
||||
(at ds
|
||||
(during/spawn (Connection $conn (TcpInbound host port))
|
||||
(accept-connection conn #:on-data (match-lambda
|
||||
[#"bye\n"
|
||||
(send-data conn #"Bye then!\n")
|
||||
(stop-current-facet)]
|
||||
[data (send-data conn data)]))))))
|
||||
|
||||
(define (run-echo-client ds host port)
|
||||
(spawn
|
||||
(define-field sink #f)
|
||||
(define-field counter 0)
|
||||
(begin/dataflow
|
||||
(when (sink)
|
||||
(send! (sink) (Socket (string->bytes/utf-8 (format "~a\n" (counter)))))))
|
||||
(establish-connection
|
||||
ds (TcpOutbound host port)
|
||||
#:on-connected (lambda (peer) (sink peer))
|
||||
#:on-rejected (lambda (reason) (log-error "Connection failed: ~v" reason))
|
||||
#:on-disconnected (lambda () (log-info "Disconnected"))
|
||||
#:on-data (lambda (data)
|
||||
(log-info "Got: ~v" data)
|
||||
(counter (+ (counter) 1))))))
|
||||
|
||||
(define host #f)
|
||||
(define port 5999)
|
||||
(define mode 'server)
|
||||
|
||||
(command-line #:once-each
|
||||
[("--host" "-H") hostname "Set host/interface to connect to/listen on"
|
||||
(set! host hostname)]
|
||||
[("--port" "-p") port-number "Set port number to connect to/listen on"
|
||||
(set! port (string->number port-number))]
|
||||
#:once-any
|
||||
["--server" "Server mode"
|
||||
(set! mode 'server)]
|
||||
["--client" "Client mode"
|
||||
(set! mode 'client)])
|
||||
|
||||
(actor-system/dataspace (ds)
|
||||
(spawn-timer-driver ds)
|
||||
(spawn-tcp-driver ds)
|
||||
(match mode
|
||||
['server (run-echo-server ds (or host "0.0.0.0") port)]
|
||||
['client (run-echo-client ds (or host "127.0.0.1") port)])))
|
||||
|
|
Loading…
Reference in New Issue