Mercurial > urweb
annotate demo/roundTrip.ur @ 1244:1eedc9086e6c
Use key information in more places, and catch cases where one key completion depends on another having happened already
author | Adam Chlipala <adamc@hcoop.net> |
---|---|
date | Sun, 18 Apr 2010 13:00:36 -0400 |
parents | ed06e25c70ef |
children |
rev | line source |
---|---|
adamc@698 | 1 table channels : { Client : client, Channel : channel (string * int * float) } |
adamc@708 | 2 PRIMARY KEY Client |
adamc@698 | 3 |
adamc@698 | 4 fun writeBack v = |
adamc@698 | 5 me <- self; |
adamc@698 | 6 r <- oneRow (SELECT channels.Channel FROM channels WHERE channels.Client = {[me]}); |
adamc@698 | 7 send r.Channels.Channel v |
adamc@698 | 8 |
adamc@733 | 9 fun action () = |
adamc@698 | 10 me <- self; |
adamc@698 | 11 ch <- channel; |
adamc@698 | 12 dml (INSERT INTO channels (Client, Channel) VALUES ({[me]}, {[ch]})); |
adamc@698 | 13 |
adamc@698 | 14 buf <- Buffer.create; |
adamc@698 | 15 |
adamc@698 | 16 let |
adamc@698 | 17 fun receiver () = |
adamc@698 | 18 v <- recv ch; |
adamc@698 | 19 Buffer.write buf ("(" ^ v.1 ^ ", " ^ show v.2 ^ ", " ^ show v.3 ^ ")"); |
adamc@698 | 20 receiver () |
adamc@698 | 21 |
adamc@698 | 22 fun sender s n f = |
adamc@698 | 23 sleep 2000; |
adamc@908 | 24 rpc (writeBack (s, n, f)); |
adamc@698 | 25 sender (s ^ "!") (n + 1) (f + 1.23) |
adamc@698 | 26 in |
adamc@698 | 27 return <xml><body onload={spawn (receiver ()); sender "" 0 0.0}> |
adamc@698 | 28 <dyn signal={Buffer.render buf}/> |
adamc@698 | 29 </body></xml> |
adamc@698 | 30 end |
adamc@733 | 31 |
adamc@733 | 32 fun main () = return <xml><body> |
adamc@733 | 33 <form><submit value="Begin demo" action={action}/></form> |
adamc@733 | 34 </body></xml> |