From 3b3f14a1c2021f307e9290ec8fba64d6c791a93a Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Sun, 5 Apr 2009 11:48:55 -0400 Subject: Chat demo --- demo/chat.ur | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 demo/chat.ur (limited to 'demo/chat.ur') diff --git a/demo/chat.ur b/demo/chat.ur new file mode 100644 index 00000000..ad1bf2ca --- /dev/null +++ b/demo/chat.ur @@ -0,0 +1,90 @@ +structure Room = Broadcast.Make(struct + type t = string + end) + +sequence s +table t : { Id : int, Title : string, Room : Room.topic } + +fun chat id = + r <- oneRow (SELECT t.Title, t.Room FROM t WHERE t.Id = {[id]}); + ch <- Room.subscribe r.T.Room; + + newLine <- source ""; + buf <- Buffer.create; + + let + fun onload () = + let + fun listener () = + s <- recv ch; + Buffer.write buf s; + listener () + in + listener () + end + + fun getRoom () = + r <- oneRow (SELECT t.Room FROM t WHERE t.Id = {[id]}); + return r.T.Room + + fun speak line = + room <- getRoom (); + Room.send room line + + fun doSpeak () = + line <- get newLine; + set newLine ""; + speak line + in + return +

{[r.T.Title]}

+ +