From 2f4525b031de962255737bae8c5d58a17c121acb Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Thu, 10 Jun 2021 13:35:26 +0200 Subject: [PATCH] Split out tcp-client.rkt and tcp-echo-server.rkt --- syndicate-examples/tcp-client.rkt | 37 ++++++++++++++++++ syndicate-examples/tcp-echo-server.rkt | 23 ++++++++++++ syndicate/drivers/tcp.rkt | 52 -------------------------- 3 files changed, 60 insertions(+), 52 deletions(-) create mode 100644 syndicate-examples/tcp-client.rkt create mode 100644 syndicate-examples/tcp-echo-server.rkt diff --git a/syndicate-examples/tcp-client.rkt b/syndicate-examples/tcp-client.rkt new file mode 100644 index 0000000..39d472a --- /dev/null +++ b/syndicate-examples/tcp-client.rkt @@ -0,0 +1,37 @@ +#lang syndicate +;;; SPDX-License-Identifier: LGPL-3.0-or-later +;;; SPDX-FileCopyrightText: Copyright © 2021 Tony Garnock-Jones + +(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)))) diff --git a/syndicate-examples/tcp-echo-server.rkt b/syndicate-examples/tcp-echo-server.rkt new file mode 100644 index 0000000..8e4096c --- /dev/null +++ b/syndicate-examples/tcp-echo-server.rkt @@ -0,0 +1,23 @@ +#lang syndicate +;;; SPDX-License-Identifier: LGPL-3.0-or-later +;;; SPDX-FileCopyrightText: Copyright © 2021 Tony Garnock-Jones + +(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)))))))) diff --git a/syndicate/drivers/tcp.rkt b/syndicate/drivers/tcp.rkt index b5fd394..6a7bc0a 100644 --- a/syndicate/drivers/tcp.rkt +++ b/syndicate/drivers/tcp.rkt @@ -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)])))