Mercurial > urweb
comparison tests/roundTrip.ur @ 1348:8a169fc0838b
Change tasks to support parametric code; add clientLeaves
author | Adam Chlipala <adam@chlipala.net> |
---|---|
date | Sat, 18 Dec 2010 14:17:45 -0500 |
parents | 7c6b6c3c7b79 |
children |
comparison
equal
deleted
inserted
replaced
1347:b106ca8200b1 | 1348:8a169fc0838b |
---|---|
1 table channels : { Client : client, Channel : channel (string * int * float) } | 1 table channels : { Client : client, Channel : channel (string * int * float) } |
2 PRIMARY KEY Client | 2 PRIMARY KEY Client |
3 | |
4 table dearlyDeparted : { Client : option client, When : time } | |
5 | |
6 task clientLeaves = fn cli : client => | |
7 dml (INSERT INTO dearlyDeparted (Client, When) VALUES ({[Some cli]}, CURRENT_TIMESTAMP)); | |
8 debug "Our favorite client has LEFT!" | |
3 | 9 |
4 fun writeBack v = | 10 fun writeBack v = |
5 me <- self; | 11 me <- self; |
6 r <- oneRow (SELECT channels.Channel FROM channels WHERE channels.Client = {[me]}); | 12 r <- oneRow (SELECT channels.Channel FROM channels WHERE channels.Client = {[me]}); |
7 send r.Channels.Channel v | 13 send r.Channels.Channel v |
8 | 14 |
9 fun main () = | 15 fun main' () = |
10 me <- self; | 16 me <- self; |
11 ch <- channel; | 17 ch <- channel; |
12 dml (INSERT INTO channels (Client, Channel) VALUES ({[me]}, {[ch]})); | 18 dml (INSERT INTO channels (Client, Channel) VALUES ({[me]}, {[ch]})); |
13 | 19 |
14 buf <- Buffer.create; | 20 buf <- Buffer.create; |
25 error <xml>Bail out!</xml>; | 31 error <xml>Bail out!</xml>; |
26 receiverB () | 32 receiverB () |
27 | 33 |
28 fun sender s n f = | 34 fun sender s n f = |
29 sleep 2000; | 35 sleep 2000; |
30 writeBack (s, n, f); | 36 rpc (writeBack (s, n, f)); |
31 sender (s ^ "!") (n + 1) (f + 1.23) | 37 sender (s ^ "!") (n + 1) (f + 1.23) |
32 in | 38 in |
33 return <xml><body onload={onDisconnect (alert "Server booted me"); | 39 return <xml><body onload={onDisconnect (alert "Server booted me"); |
34 onConnectFail (alert "Connection failed"); | 40 onConnectFail (alert "Connection failed"); |
35 onServerError (fn s => alert ("Server error: " ^ s)); | 41 onServerError (fn s => alert ("Server error: " ^ s)); |
36 spawn (receiverA ()); spawn (receiverB ()); sender "" 0 0.0}> | 42 spawn (receiverA ()); spawn (receiverB ()); sender "" 0 0.0}> |
37 <dyn signal={Buffer.render buf}/> | 43 <dyn signal={Buffer.render buf}/> |
38 </body></xml> | 44 </body></xml> |
39 end | 45 end |
46 | |
47 fun main () = return <xml><body><form><submit action={main'}/></form></body></xml> |