;; -*- Mode: Irken -*- (include "lib/basis.scm") (include "lib/map.scm") (include "doom/doom.scm") (include "lib/codecs/base64.scm") (include "lib/crypto/sha1.scm") (include "doom/http/websocket.scm") (define (ws-echo-client sockfun) (let ((ws (websocket (sockfun 8192 8192)))) (for pkt ws.pktgen (match pkt with (:tuple opcode data fin?) -> (ws.send-packet opcode data fin?))) (printf "exiting client...\n") (ws.close) )) (define (serve ip port) (let ((sock (doom/make (tcp4-sock))) (addr (address/make4 ip port))) (sock.bind addr) (sock.listen 5) (printf "starting server...\n") (let loop () (printf "accept wait...\n") (let (((sockfun addr) (sock.accept))) (printf "client: addr " (address/unparse addr) "\n") (poller/fork (lambda () (ws-echo-client sockfun))) (loop))))) (serve "0.0.0.0" 9999) (poller/wait-and-schedule)