1 // (c) Bernhard Tittelbach, 2013
6 zmq "github.com/vaughan0/go-zmq"
9 // ---------- ZeroMQ Code -------------
11 func ZmqsInit(cmd_port, sub_port string) (cmd_chans, pub_chans *zmq.Channels) {
13 cmd_ctx, err := zmq.NewContext()
17 //close only on panic, otherwise leave open:
18 defer func(){ if r:= recover(); r != nil { cmd_ctx.Close(); panic(r) } }()
20 pub_ctx, err := zmq.NewContext()
24 defer func() { if r:= recover(); r != nil { pub_ctx.Close(); panic(r) } }()
26 cmd_sock, err := cmd_ctx.Socket(zmq.Req)
30 defer func() { if r:= recover(); r != nil { cmd_sock.Close(); panic(r) } }()
32 pub_sock, err := pub_ctx.Socket(zmq.Sub)
36 defer func() { if r:= recover(); r != nil { pub_sock.Close(); panic(r) } }()
38 if err = cmd_sock.Bind(cmd_port); err != nil {
42 if err = pub_sock.Bind(sub_port); err != nil {
46 cmd_chans = cmd_sock.Channels()
47 pub_chans = cmd_sock.Channels()
48 go zmqsHandleError(cmd_chans, pub_chans)
52 func zmqsHandleError(cmd_chans, pub_chans *zmq.Channels) {
55 case cmd_error := <- cmd_chans.Errors():
59 case pub_error := <- pub_chans.Errors():