X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=blobdiff_plain;f=chat_client.scm;h=d50057992ec5df9432d78dbcc8dc59540c881a0a;hb=bddae1c3d6107626a05f4a7b026905846c0227ac;hp=60d0ee4ca312bbccf0556f92cd31cd0c97422f7d;hpb=0fb9daea3d2da0258a787e5918bf5622a2f70d1e;p=sam.git diff --git a/chat_client.scm b/chat_client.scm index 60d0ee4..d500579 100644 --- a/chat_client.scm +++ b/chat_client.scm @@ -1,21 +1,19 @@ -(import sam - matchable +(import matchable srfi-13 (chicken process-context)) -(define client-beh +(define (make-client-beh system) (let ((name "name") (recipients '())) - (lambda (self . message) (match message (('start) (send-message system 'print "Welcome to chat!\n" - "Your client address is " self ".\n" + "Your client address is " (address->string self) ".\n" "Type '/help' for a list of commands.\n") (send-message system 'read self)) (('show-msg from text) - (send-message system 'print "Message from " from ": " text)) + (send-message system 'print from "> " text)) (((? string? str)) (if (string-prefix? "/" str) (let* ((maybe-idx (string-index str #\space)) @@ -37,7 +35,7 @@ (if (string-null? arg) (send-message system 'print "Missing address of client.") (begin - (set! recipients (cons arg recipients)) + (set! recipients (cons (string->address arg) recipients)) (send-message system 'print "Added recipient to chat.")))) ((or "c" "clear") (set! recipients '()) @@ -52,7 +50,7 @@ (send-message system 'print "Current recipients:") (let loop ((recipients-left recipients)) (unless (null? recipients-left) - (send-message system 'print (car recipients-left)) + (send-message system 'print (address->string (car recipients-left))) (loop (cdr recipients-left))))))) ((or "q" "quit") (send-message system 'shutdown)) @@ -67,26 +65,6 @@ (send-message system 'read self) 'sleep))) -(define (print-usage) - (print "Actor-driven chat client.\n") - (print "Usage: chat_client -h") - (print " chat_client [-p port_num] [-n host_name]")) - -(let loop ((args (cdr (argv))) - (host "localhost") - (port 8000)) - (match args - (((or "-h" "--help")) - (print-usage)) - (((or "-p" "--port") pstr rest ...) - (loop rest host (string->number pstr))) - (((or "-n" "--hostname") hstr rest ...) - (loop rest hstr port)) - (() - (init-sam host port) - (send-message (make-actor client-beh) 'start) - (start-console)) - (else - (print "Unrecognised argument '" (car args) "'.\n") - (print-usage)))) - +(define (main-beh self system) + (send-message (make-actor (make-client-beh system)) 'start) + 'done)