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)
|
(define (send-data conn data)
|
||||||
(send! conn (Socket (if (bytes? data) data (string->bytes/utf-8 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