Mercurial > urweb
annotate tests/spawn.ur @ 2185:cbd294994c69
Monad.mapR3
author | Adam Chlipala <adam@chlipala.net> |
---|---|
date | Sat, 31 Oct 2015 11:49:30 -0400 |
parents | 7ea0df9e56b6 |
children |
rev | line source |
---|---|
adamc@694 | 1 table t : {A : int, Ch : channel string} |
adamc@694 | 2 |
adamc@694 | 3 fun listener n ch = |
adamc@694 | 4 s <- recv ch; |
adamc@694 | 5 alert (show n ^ ": " ^ s); |
adamc@694 | 6 listener n ch |
adamc@694 | 7 |
adamc@694 | 8 fun speak id msg = |
adamc@694 | 9 r <- oneRow (SELECT t.Ch FROM t WHERE t.A = {[id]}); |
adamc@694 | 10 send r.T.Ch msg |
adamc@694 | 11 |
adamc@694 | 12 fun main () : transaction page = |
adamc@694 | 13 ch1 <- channel; |
adamc@694 | 14 dml (INSERT INTO t (A, Ch) VALUES (1, {[ch1]})); |
adamc@694 | 15 ch2 <- channel; |
adamc@694 | 16 dml (INSERT INTO t (A, Ch) VALUES (2, {[ch2]})); |
adamc@694 | 17 |
adamc@694 | 18 s1 <- source ""; |
adamc@694 | 19 s2 <- source ""; |
adamc@694 | 20 |
adamc@694 | 21 return <xml><body onload={spawn (listener 1 ch1); spawn (listener 2 ch2)}> |
adamc@694 | 22 1: <ctextbox source={s1}/><button onclick={msg <- get s1; speak 1 msg}/><br/> |
adamc@694 | 23 2: <ctextbox source={s2}/><button onclick={msg <- get s2; speak 2 msg}/> |
adamc@694 | 24 </body></xml> |