reply using new reply method
[mudsync.git] / mudsync / networking.scm
index f69f47a92cc13dc3a3d305954e321c76793ad857..e553e01e811dfe85a55de611722966afae6b2dc7 100644 (file)
@@ -32,6 +32,7 @@
   #:use-module (web response)
   #:use-module (web uri)
   #:use-module (mudsync package-config)
+  #:use-module (mudsync contrib mime-types)
   #:use-module (rnrs io ports)
 
   #:export (;; Should we be exporting these?
         (pk 'web-server (create-actor nm <websocket-server>
                                       #:port web-server-port
                                       #:http-handler (wrap-apply http-handler)
-                                      #:websocket-handler (wrap-apply websocket-handler)))))
+                                      #:on-ws-message (wrap-apply websocket-new-message)))))
 
 (define (view:main-display request body)
+  (define one-entry
+    '(div (@ (class "stream-entry"))
+          (p "This is an entry!")
+          (p "Let's try a few paragraphs")
+          (p "okay?")))
+
   (define body-tmpl
-    '((div (@ (id "stream-output"))
-           (p "nope"))
-      (div (@ (id "input-box"))
+    `((div (@ (id "stream-metabox"))
+           (div (@ (id "stream"))
+                ,@(map (const one-entry) (iota 10))))
+      (div (@ (id "input-metabox"))
            (p "test test")
            (input (@ (id "input"))))))
 
            (head (title "Mudsync!")
                  (meta (@ (charset "UTF-8")))
                  (link (@ (rel "stylesheet")
-                          (href "/static/css/main.css"))))
+                          (href "/static/css/main.css")))
+                 (script (@ (type "text/javascript")
+                            (src "/static/js/mudsync.js"))))
            (body ,@body-tmpl)))
   (define (write-template-to-string)
     (with-fluids ((%default-port-encoding "UTF-8"))
-      (with-output-to-string
-        (lambda ()
-          (sxml->xml (main-tmpl))))))
+      (call-with-output-string
+        (lambda (p)
+          (sxml->xml (main-tmpl) p)))))
   (values (build-response #:code 200
                           #:headers '((content-type . (application/xhtml+xml))))
           (write-template-to-string)))
 
 (define (view:render-static request body static-path)
   (values (build-response #:code 200
-                          ;; #:content-type (mime-type static-path)
-                          )
+                          #:headers `((content-type . (,(mime-type static-path)))))
           (call-with-input-file (web-static-filepath static-path) get-bytevector-all)))
 
 (define (view:standard-four-oh-four . args)
 
 ;; Respond to text messages by reversing the message.  Respond to
 ;; binary messages with "hello".
-(define (websocket-handler data)
-  (if (string? data)
-      (string-reverse data)
-      "hello"))
+(define (websocket-new-message websocket-server client-id data)
+  (<- (actor-id websocket-server) 'ws-send
+      client-id
+      (if (string? data)
+          (string-reverse data)
+          "hello")))