...
[svn42.git] / go / r3-eventbroker_zmq / zeromq.go
index 2e28d50..55aa201 100644 (file)
@@ -5,15 +5,12 @@ package main
 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 {
@@ -22,7 +19,7 @@ func ZmqsInit(sub_connect_port, sub_listen_port, pub_port, keylookup_port string
     //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)
@@ -81,9 +78,8 @@ func zmqsHandleError(chans *zmq.Channels) {
     }
 }
 
-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()
@@ -93,20 +89,13 @@ func (s ReqSocket) ZmqsRequestAnswer(request [][]byte) (answer []][]byte) {
     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")