change hostname wuzzler to torwaechter
[svn42.git] / go / r3-eventbroker_zmq / zeromq.go
index e13e6f8..a3d6b02 100644 (file)
@@ -80,6 +80,24 @@ func zmqsHandleError(chans *zmq.Channels) {
     }
 }
 
+func ZmqsBindNewReplySocket(ctx *zmq.Context, addr string) (chans *zmq.Channels, err error) {
+    if len(addr) == 0 {
+        return nil, errors.New("No listen address given")
+    }
+    sock, err := ctx.Socket(zmq.Rep)
+    if err != nil { return nil, err}
+
+    if err = sock.Bind(addr); err != nil {
+        sock.Close()
+        return nil, err
+    }
+
+    chans = sock.ChannelsBuffer(10)
+    go zmqsHandleError(chans)
+
+    return chans, nil
+}
+
 func ZmqsRequestAnswer(sock *zmq.Socket, request [][]byte) (answer [][]byte) {
     if err := sock.Send(request); err != nil {
         panic(err)
@@ -91,6 +109,26 @@ func ZmqsRequestAnswer(sock *zmq.Socket, request [][]byte) (answer [][]byte) {
     return parts
 }
 
+func ZmqsAskQuestionsAndClose(ctx *zmq.Context, addr string, questions [][][]byte) [][][]byte {
+    if len(addr) == 0 || ctx == nil { return nil }
+
+    req_sock, err := ctx.Socket(zmq.Req)
+    if err != nil {
+        return nil
+    }
+    defer req_sock.Close()
+
+    if err = req_sock.Connect(addr); err != nil {
+        return nil
+    }
+
+    rv := make([][][]byte, len(questions))
+    for index, q := range(questions) {
+        rv[index] = ZmqsRequestAnswer(req_sock, q)
+    }
+    return rv
+}
+
 func LookupCardIdNick(s *zmq.Socket, hexbytes []byte) (string, error) {
     answ := ZmqsRequestAnswer(s, [][]byte{hexbytes})
     if len(answ) == 0 {