--bugs but cgo and zmq together still suck
[svn42.git] / go / door_client_zmq / zeromq.go
index 4b3b87d..485e3f2 100644 (file)
@@ -4,62 +4,61 @@ package main
 
 import (
     zmq "github.com/vaughan0/go-zmq"
+    "time"
  )
 
 // ---------- ZeroMQ Code -------------
 
-func ZmqsInit(cmd_port, sub_port string)  (cmd_chans, pub_chans *zmq.Channels) {
+func ZmqsInit(cmd_port, sub_port string)  (cmd_chans, sub_chans *zmq.Channels) {
 
-    cmd_ctx, err := zmq.NewContext()
+    ctx, err := zmq.NewContext()
     if err != nil {
         panic(err)
     }
     //close only on panic, otherwise leave open:
-    defer func(){ if r:= recover(); r != nil { cmd_ctx.Close(); panic(r) } }()
+    defer func(){ if r:= recover(); r != nil { ctx.Close(); panic(r) } }()
 
-    pub_ctx, err := zmq.NewContext()
-    if err != nil {
-        panic(err)
-    }
-    defer func() { if r:= recover(); r != nil { pub_ctx.Close(); panic(r) } }()
-
-    cmd_sock, err := cmd_ctx.Socket(zmq.Req)
+    cmd_sock, err := ctx.Socket(zmq.Req)
     if err != nil {
         panic(err)
     }
     defer func() { if r:= recover(); r != nil { cmd_sock.Close(); panic(r) } }()
 
-    pub_sock, err := pub_ctx.Socket(zmq.Sub)
+    cmd_sock.SetRecvTimeout(2 * time.Second)
+    cmd_sock.SetSendTimeout(2 * time.Second)
+
+    sub_sock, err := ctx.Socket(zmq.Sub)
     if err != nil {
         panic(err)
     }
-    defer func() { if r:= recover(); r != nil { pub_sock.Close(); panic(r) } }()
+    defer func() { if r:= recover(); r != nil { sub_sock.Close(); panic(r) } }()
 
-    if err = cmd_sock.Bind(cmd_port); err != nil {
+    if err = cmd_sock.Connect(cmd_port); err != nil {
         panic(err)
     }
 
-    if err = pub_sock.Bind(sub_port); err != nil {
+    if err = sub_sock.Connect(sub_port); err != nil {
         panic(err)
     }
 
-    cmd_chans = cmd_sock.Channels()
-    pub_chans = cmd_sock.Channels()
-    go zmqsHandleError(cmd_chans, pub_chans)
+    cmd_chans = cmd_sock.ChannelsBuffer(10)
+    sub_chans = cmd_sock.ChannelsBuffer(10)
+
+    go zmqsHandleError(cmd_chans, sub_chans)
     return
 }
 
-func zmqsHandleError(cmd_chans, pub_chans *zmq.Channels) {
+func zmqsHandleError(cmd_chans, sub_chans *zmq.Channels) {
     for {
         select {
             case cmd_error := <- cmd_chans.Errors():
                 cmd_chans.Close()
-                pub_chans.Close()
+                sub_chans.Close()
                 panic(cmd_error)
-            case pub_error := <- pub_chans.Errors():
+            case sub_error := <- sub_chans.Errors():
                 cmd_chans.Close()
-                pub_chans.Close()
-                panic(pub_error)
+                sub_chans.Close()
+                panic(sub_error)
         }
     }
 }
\ No newline at end of file