import (
zmq "github.com/vaughan0/go-zmq"
"bytes"
- "error"
+ "errors"
)
// ---------- ZeroMQ Code -------------
-type ReqSocket *zmq.Socket
-type PubSocket *zmq.Socket
-
-func ZmqsInit(sub_connect_port, sub_listen_port, pub_port, keylookup_port string) (ctx *zmq.Context, sub_chans *zmq.Channels, pub_sock PubSocket, keylookup_sock ReqSocket) {
+func ZmqsInit(sub_connect_port, sub_listen_port, pub_port, keylookup_port string) (ctx *zmq.Context, sub_chans *zmq.Channels, pub_sock *zmq.Socket, keylookup_sock *zmq.Socket) {
var err error
ctx, err = zmq.NewContext()
if err != nil {
//close only on later panic, otherwise leave open:
defer func(){ if r:= recover(); r != nil { ctx.Close(); panic(r) } }()
- if len(sub_port) > 0 {
+ if len(sub_connect_port) > 0 && len(sub_listen_port) > 0 {
sub_sock, err := ctx.Socket(zmq.Sub)
if err != nil {
panic(err)
}
}
-func (s ReqSocket) ZmqsRequestAnswer(request [][]byte) (answer []][]byte) {
- sock := s.(*zmq.Socket)
- if err = sock.Send(request); err != nil {
+func (sock *zmq.Socket) ZmqsRequestAnswer(request [][]byte) (answer [][]byte) {
+ if err := sock.Send(request); err != nil {
panic(err)
}
parts, err := sock.Recv()
return parts
}
-func (s PubSocket) ZmqsPublish(msg [][]byte) {
- sock := s.(*zmq.Socket)
- if err = sock.Send(msg); err != nil {
- panic(err)
- }
-}
-
-func (s ReqSocket) LookupCardIdNick(hexbytes []byte) (nick string, error) {
+func (s *zmq.Socket) LookupCardIdNick(hexbytes []byte) (nick string, error) {
answ := s.ZmqsRequestAnswer([][]byte{hexbytes})
if len(answ) == 0 {
return "", errors.New("Empty reply received")
}
if answ[0] == []byte("ERROR") {
- return "", errors.New(string(bytes.Join(answ[1:])))
+ return "", errors.New(string(bytes.Join(answ[1:],[]byte(" "))))
}
if answ[0] != []byte("RESULT") || len(answ) != 3{
return "", errors.New("Unknown reply received")