Mercurial > hg > plosc
diff example/testosc.pl @ 0:bbd2b1abfb32
Initial check in.
author | samer |
---|---|
date | Wed, 11 Jan 2012 15:30:21 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/testosc.pl Wed Jan 11 15:30:21 2012 +0000 @@ -0,0 +1,62 @@ +:- module(testosc, [osc/1]). + +:- use_module(library(plosc)). + +:- dynamic server/2. + +ack(_,_) :- writeln(ack_received). + +echo(P,A) :- writeln(msg(P,A)). +echo(Sender,Time,P,A) :- + format('from ~w at ~w: ~w.\n',[Sender,Time,msg(P,A)]), + ( Time=osc_immed -> osc_send(Sender,'/ack',[]) + ; osc_time_ts(T0,Time) -> osc_send(Sender,'/ack',[],T0+1) + ). + +forward(_,[string(Host),int(Port),string(Msg)|Args]) :- + osc_mk_address(Host,Port,Addr), + osc_send(Addr,Msg,Args). + +sched_at(_,[double(Delay),string(Host),int(Port),string(Msg)|Args]) :- + get_time(Now), Time is Now+Delay, + osc_mk_address(Host,Port,Addr), + osc_send(Addr,Msg,Args,Time). + +osc(init(Port)) :- osc_mk_server(Port,S), + osc_mk_address(localhost,Port,P), + osc_add_handler_x(S, '/echox', any, echo), + osc_add_handler(S, '/echo', any, echo), + osc_add_handler(S, '/fwd', any, forward), + osc_add_handler(S, '/after', any, sched_in), + osc_add_handler(S, '/ack', any, ack), + assert(server(S,P)). + +osc(start) :- server(S,_), osc_start_server(S), at_halt(osc(stop)). +osc(stop) :- server(S,_), osc_stop_server(S). +osc(run) :- server(S,_), osc_run_server(S). + +osc(send(M,A)) :- server(_,P), osc_send(P,M,A). +osc(send(M,A,T)) :- server(_,P), osc_send(P,M,A,T). +osc(send_from(M,A,T)) :- server(S,P), osc_send_from(S,P,M,A,T). + +run(Port) :- osc(init(Port)), + nl, + writeln('Commands:'), nl, + writeln(' osc(start) to start the server in a new thread.'), + writeln(' osc(stop) to stop the server thread.'), + writeln(' osc(run) run the server synchronously in the current thread.'), + writeln(' osc(send(Path,Args)) send message with Path and Args.'), + writeln(' osc(send(Path,Args,Time)) send timestamped message with Path and Args.'), + nl, + writeln('OSC messages:'), nl, + writeln(' /echo <<args>>'), + writeln(' write messages and arguments.'), + writeln(' /echox <<args>>'), + writeln(' write messages and arguments with sender and timestamp.'), + writeln(' /fwd s<host> i<port> s<path> <<args>>'), + writeln(' forward message to given server.'), + writeln(' /after d<delay> s<host> i<port> s<path> <<args>>'), + writeln(' forward message after delay.'), + writeln(' /plosc/stop'), + writeln(' stop the synchronous server.'), + nl.