default:
ignore_next = true
cmd_chans.Out() <- input
- log.Print("input sent")
reply := <- cmd_chans.In()
- log.Print("reply received")
fmt.Println(ByteArrayToString(reply))
}
} else {
// ---------- ZeroMQ Code -------------
func ZmqsInit(cmd_port, sub_port string) (ctx *zmq.Context, cmd_chans, sub_chans *zmq.Channels) {
- var subfilter []byte
var err error
ctx, err = zmq.NewContext()
if err != nil {
if err = cmd_sock.Connect(cmd_port); err != nil {
panic(err)
}
-
+
cmd_chans = cmd_sock.ChannelsBuffer(10)
go zmqsHandleError(cmd_chans)
} else {
}
defer func() { if r:= recover(); r != nil { sub_sock.Close(); panic(r) } }()
- sub_sock.Subscribe(subfilter)
+ sub_sock.Subscribe([]byte("close"))
+ sub_sock.Subscribe([]byte("toggle"))
+ sub_sock.Subscribe([]byte("Info"))
+ sub_sock.Subscribe([]byte("State"))
+ sub_sock.Subscribe([]byte("open"))
if err = sub_sock.Connect(sub_port); err != nil {
panic(err)
func zmqsHandleError(chans *zmq.Channels) {
for error := range(chans.Errors()) {
chans.Close()
- panic(error)
+ panic(error)
}
}
"os"
"flag"
"time"
- //~ "log"
)
//~ func StringArrayToByteArray(ss []string) [][]byte {
}
case incoming_request, ic_notclosed := <- cmd_chans.In():
if ! ic_notclosed {os.Exit(2)}
- //~ log.Print(incoming_request)
if err := HandleCommand(incoming_request, serial_wr, serial_rd); err != nil {
- //~ log.Print(err)
out_msg := [][]byte{[]byte("ERROR"), []byte(err.Error())}
cmd_chans.Out() <- out_msg
- //~ log.Print("sent error")
} else {
- //~ log.Print(reply)
pub_chans.Out() <- incoming_request
next_incoming_serial_is_client_reply = true
go func(){time.Sleep(3*time.Second); timeout_chan <- true;}()
- //~ log.Print("sent reply")
}
}
}
if err = cmd_sock.Bind(cmd_port); err != nil {
panic(err)
}
-
+
cmd_chans = cmd_sock.ChannelsBuffer(10)
go zmqsHandleError(cmd_chans)
} else {
func zmqsHandleError(chans *zmq.Channels) {
for error := range(chans.Errors()) {
chans.Close()
- panic(error)
+ panic(error)
}
}
\ No newline at end of file