From 9791100322ea754fd6f5f42734e029d55c6e6b8c Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Thu, 12 Jul 2012 13:25:46 -0400 Subject: [PATCH] Results of pair-programming with Sam yesterday evening --- tcp-api/non-os2-0.rkt | 19 ++++++++++++++ tcp-api/non-os2-1.rkt | 20 +++++++++++++++ tcp-api/non-os2-2.rkt | 22 +++++++++++++++++ tcp-api/non-os2-3.rkt | 22 +++++++++++++++++ tcp-api/os2-tcp-test-echo-service-2.rkt | 33 +++++++++++++++++++++++++ 5 files changed, 116 insertions(+) create mode 100644 tcp-api/non-os2-0.rkt create mode 100644 tcp-api/non-os2-1.rkt create mode 100644 tcp-api/non-os2-2.rkt create mode 100644 tcp-api/non-os2-3.rkt create mode 100644 tcp-api/os2-tcp-test-echo-service-2.rkt diff --git a/tcp-api/non-os2-0.rkt b/tcp-api/non-os2-0.rkt new file mode 100644 index 0000000..c68ffcd --- /dev/null +++ b/tcp-api/non-os2-0.rkt @@ -0,0 +1,19 @@ +#lang racket/base + +(require racket/tcp) + +(define (main port) + (define listener (tcp-listen port 4 #t)) + (let loop () + (define-values (cin cout) (tcp-accept listener)) + (let connection-loop () + (define v (read-byte cin)) + (unless (eof-object? v) + (write-byte v cout) + (flush-output cout) + (connection-loop))) + (close-input-port cin) + (close-output-port cout) + (loop))) + +(main 5999) diff --git a/tcp-api/non-os2-1.rkt b/tcp-api/non-os2-1.rkt new file mode 100644 index 0000000..c22f133 --- /dev/null +++ b/tcp-api/non-os2-1.rkt @@ -0,0 +1,20 @@ +#lang racket/base + +(require racket/tcp) + +(define (main port) + (define listener (tcp-listen port 4 #t)) + (let loop () + (define-values (cin cout) (tcp-accept listener)) + (let connection-loop () + (define v (read-byte cin)) + (unless (or (eof-object? v) + (equal? v #"\4")) + (write-byte v cout) + (flush-output cout) + (connection-loop))) + (close-input-port cin) + (close-output-port cout) + (loop))) + +(main 5999) diff --git a/tcp-api/non-os2-2.rkt b/tcp-api/non-os2-2.rkt new file mode 100644 index 0000000..f73e692 --- /dev/null +++ b/tcp-api/non-os2-2.rkt @@ -0,0 +1,22 @@ +#lang racket/base + +(require racket/tcp) + +(define (main port) + (define listener (tcp-listen port 4 #t)) + (let loop () + (define-values (cin cout) (tcp-accept listener)) + (thread + (lambda () + (let connection-loop () + (define v (read-byte cin)) + (unless (or (eof-object? v) + (equal? v #"\4")) + (write-byte v cout) + (flush-output cout) + (connection-loop))) + (close-input-port cin) + (close-output-port cout))) + (loop))) + +(main 5999) diff --git a/tcp-api/non-os2-3.rkt b/tcp-api/non-os2-3.rkt new file mode 100644 index 0000000..44da843 --- /dev/null +++ b/tcp-api/non-os2-3.rkt @@ -0,0 +1,22 @@ +#lang racket/base + +(define (main port) + (define listener (tcp-listen port 4 #t)) + (let loop () + (define-values (cin cout) (tcp-accept listener)) + (thread (connection-handler cin cout)) + (loop))) + +(define (connection-handler cin cout) + (let connection-loop () + (define v (read-byte cin)) + (unless (or (eof-object? v) (equal? v #"\4")) + (write-byte v cout) + (flush-output cout) + (connection-loop))) + (close-input-port cin) + (close-output-port cout)) + +(main 5999) + +(require racket/tcp) diff --git a/tcp-api/os2-tcp-test-echo-service-2.rkt b/tcp-api/os2-tcp-test-echo-service-2.rkt new file mode 100644 index 0000000..70d6723 --- /dev/null +++ b/tcp-api/os2-tcp-test-echo-service-2.rkt @@ -0,0 +1,33 @@ +#lang racket/base + +(define (listener port) + (transition 'no-state + (role/act (tcp-listener port) + #:topic t + #:on-presence (spawn (connection-handler t)))))) + +(define (connection-handler topic) + (define-values (cin cout in-topic out-topic) (tcp-accept topic)) + (transition 'no-state + (cin (tcp-credit 1) #:mode 'feedback) + (role/act in-topic + [(tcp-channel _ _ (or (== #"\4") (? eof-object?))) + (kill)] + [(tcp-channel _ _ (? bytes? line)) + (list (cin (tcp-credit 1) #:mode 'feedback) + (cout line))]))) + +(define (main port) + (ground-vm + (transition 'no-state + (spawn tcp-driver) + (spawn (listener port))))) + +(main 5999) + +(require racket/string) +(require racket/set) +(require racket/match) +(require "os2.rkt") +(require "os2-tcp.rkt") +(require "os2-tcp-helper.rkt")