File: spawn.ur

package info (click to toggle)
urweb 20170105%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 8,640 kB
  • ctags: 9,972
  • sloc: ansic: 6,402; lisp: 1,198; makefile: 173; sh: 44; sql: 1
file content (24 lines) | stat: -rw-r--r-- 710 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
table t : {A : int, Ch : channel string}

fun listener n ch =
    s <- recv ch;
    alert (show n ^ ": " ^ s);
    listener n ch

fun speak id msg =
    r <- oneRow (SELECT t.Ch FROM t WHERE t.A = {[id]});
    send r.T.Ch msg

fun main () : transaction page =
    ch1 <- channel;
    dml (INSERT INTO t (A, Ch) VALUES (1, {[ch1]}));
    ch2 <- channel;
    dml (INSERT INTO t (A, Ch) VALUES (2, {[ch2]}));

    s1 <- source "";
    s2 <- source "";

    return <xml><body onload={spawn (listener 1 ch1); spawn (listener 2 ch2)}>
      1: <ctextbox source={s1}/><button onclick={msg <- get s1; speak 1 msg}/><br/>
      2: <ctextbox source={s2}/><button onclick={msg <- get s2; speak 2 msg}/>
    </body></xml>