view demo/broadcast.ur @ 1892:907a82a44f01

Add missing inter-library dependencies This is needed, at least on recent Ubuntu, to fix these linker errors when compiling any Ur/Web application: liburweb.so: undefined reference to `lround' liburweb.so: undefined reference to `ceil' liburweb.so: undefined reference to `RAND_bytes' liburweb.so: undefined reference to `DES_fcrypt' liburweb.so: undefined reference to `SHA256_Init' liburweb.so: undefined reference to `SHA256_Final' liburweb.so: undefined reference to `SHA256_Update' Signed-off-by: Anders Kaseorg <andersk@mit.edu> --- src/c/Makefile.am | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
author Anders Kaseorg <andersk@mit.edu>
date Thu, 21 Nov 2013 14:32:11 -0500
parents 0406e9cccb72
children
line wrap: on
line source
functor Make(M : sig type t end) = struct
    sequence s
    table t : {Id : int, Client : client, Channel : channel M.t}
      PRIMARY KEY (Id, Client)

    type topic = int

    val inj : sql_injectable topic = _

    val create = nextval s

    fun subscribe id =
        cli <- self;
        ro <- oneOrNoRows (SELECT t.Channel FROM t WHERE t.Id = {[id]} AND t.Client = {[cli]});
        case ro of
            None =>
            ch <- channel;
            dml (INSERT INTO t (Id, Client, Channel) VALUES ({[id]}, {[cli]}, {[ch]}));
            return ch
          | Some r => return r.T.Channel

    fun send id msg =
        queryI (SELECT t.Channel FROM t WHERE t.Id = {[id]})
        (fn r => Basis.send r.T.Channel msg)

    fun subscribers id =
        r <- oneRow (SELECT COUNT( * ) AS N FROM t WHERE t.Id = {[id]});
        return r.N
end