adamc@728: table channels : { Client : client, Channel : channel (string * int * float) } adamc@728: PRIMARY KEY Client adamc@728: adamc@728: fun writeBack v = adamc@728: me <- self; adamc@728: r <- oneRow (SELECT channels.Channel FROM channels WHERE channels.Client = {[me]}); adamc@728: send r.Channels.Channel v adamc@728: adamc@728: fun main () = adamc@728: me <- self; adamc@728: ch <- channel; adamc@728: dml (INSERT INTO channels (Client, Channel) VALUES ({[me]}, {[ch]})); adamc@728: adamc@728: buf <- Buffer.create; adamc@728: adamc@728: let adamc@728: fun receiverA () = adamc@728: v <- recv ch; adamc@728: Buffer.write buf ("A:(" ^ v.1 ^ ", " ^ show v.2 ^ ", " ^ show v.3 ^ ")"); adamc@728: receiverA () adamc@728: adamc@728: fun receiverB () = adamc@728: v <- recv ch; adamc@728: Buffer.write buf ("B:(" ^ v.1 ^ ", " ^ show v.2 ^ ", " ^ show v.3 ^ ")"); adamc@728: error Bail out!; adamc@728: receiverB () adamc@728: adamc@728: fun sender s n f = adamc@728: sleep 9; adamc@728: writeBack (s, n, f); adamc@728: sender (s ^ "!") (n + 1) (f + 1.23) adamc@728: in adamc@728: return adamc@728: adamc@728: adamc@728: end