Results of pair-programming with Sam yesterday evening

This commit is contained in:
Tony Garnock-Jones 2012-07-12 13:25:46 -04:00
parent 7d2d701507
commit 9791100322
5 changed files with 116 additions and 0 deletions

19
tcp-api/non-os2-0.rkt Normal file
View File

@ -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)

20
tcp-api/non-os2-1.rkt Normal file
View File

@ -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)

22
tcp-api/non-os2-2.rkt Normal file
View File

@ -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)

22
tcp-api/non-os2-3.rkt Normal file
View File

@ -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)

View File

@ -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")