## ZeroMQ - klient
# + linux, tclkit8.5/6, pamietac o ". e" PRZED uruchomieniem konsoli!
# skrypt "e" ustawia LD_LIBRARY_PATH na kat. z bibl. .so
# + docs:
# http://zguide.zeromq.org/page:all#Getting-the-Message-Out
# http://wiki.tcl.tk/27462 - zmq
# http://wiki.tcl.tk/37718 - msgpck (wersja skryptowa?)
# jest tez ksiazka w pdf...
# + uwagi o ZMQ:
# 1. zmq jest nie ma NIC wspolnego ze sposobami serializacji str. danych
# mozna np. uzywac msgpack
# 2. zmq WYMUSZA odp. kolejnosc recv/send w zaleznosci od wzorca komunikacji: REQ/REP, PUB/SUB, itp
# np REQ/REP wymaga komunikacji jak w tym przykladzie
#
proc err args {catch $args err; set err}
lappend auto_path ./zeromq
package re zmq
#% 4.0.1
package re msgpack
#% 0.5.0
zmq version
#info comm zmq::*; # lista komend pakietu zmq
#info comm msgpack::*
# + tu uzywa sie ensables, czyli "zmq context" zamiast "zmq::context"
zmq context c1
zmq socket s1 c1 REQ
#% ::s1
#err s1 qqq
#% bad method "qqq": must be bind, cget, close, configure, connect, destroy, disconnect, get, getsockopt, readable, recv_msg, send_msg, dump, recv, send, sendmore, set, setsockopt, unbind, writable, recv_monitor_event, or monitor
s1 connect "tcp://localhost:7777"
#%
s1 send "A ku ku !!! ??? 123"
#%
#%
s1 recv
#% odp na: A ku ku !!! ??? 123
# + zmq WYMUSZA odp. kolejnosc send/recv !!!
# + co sie dzieje po chwilowym wylaczeniu serwera ? 05.2020
c1 config
s1 config
# + introspekcja?
s1 destroy
c1 destroy
# binarna serializacja przy pomocy "msgpack"...
# + mozna tez uzywac innej bibl, np. CDR z Corby lub XDR z Sun RPC
#
msgpack packer p
#% ::p
p pack string "A ku ku !!!"
p pack double 123.123
#%
msgpack unpack [p data]
#% {raw {A ku ku !!!}} {double 123.123}
p destroy
#%
err p qqq
exit