door_daemon_zmq
[svn42.git] / go / door_daemon_zmq / main.go
diff --git a/go/door_daemon_zmq/main.go b/go/door_daemon_zmq/main.go
new file mode 100644 (file)
index 0000000..28be188
--- /dev/null
@@ -0,0 +1,59 @@
+// (c) Bernhard Tittelbach, 2013
+
+package main
+
+import (
+    "fmt"
+    "os"
+    "flag"
+    "log"
+)
+
+//~ func StringArrayToByteArray(ss []string) [][]byte {
+    //~ bb := make([][]byte, len(ss))
+    //~ for index, s := range(ss) {
+        //~ bb[index] = []byte(s)
+    //~ }
+    //~ return bb
+//~ }
+
+// ---------- Main Code -------------
+
+func usage() {
+    fmt.Fprintf(os.Stderr, "Usage: door_daemon_0mq <door tty device>\n")
+    flag.PrintDefaults()
+}
+
+func main() {
+    flag.Usage = usage
+    flag.Parse()
+
+    args := flag.Args()
+    if len(args) < 1 {
+        fmt.Fprintf(os.Stderr, "Input file is missing!\n");
+        usage()
+        os.Exit(1);
+    }
+    
+    cmd_chans, pub_chans := ZmqsInit("tcp://localhost:5555", "gmp://*:6666")   
+    
+    serial_wr, serial_rd, err := OpenAndHandleSerial(args[0], pub_chans.Out())
+    if err != nil {
+        close(serial_wr)
+        panic(err)
+    }
+    
+    serial_wr <- "f"
+    firmware_version := <- serial_rd
+    log.Print("Firmware version:", firmware_version)
+
+    for incoming_request := range cmd_chans.In() {
+        reply, err := HandleCommand(incoming_request, pub_chans.Out(), serial_wr, serial_rd)
+         if err != nil {
+            cmd_chans.Out() <- [][]byte{[]byte("ERROR"), []byte(err.Error())}
+            log.Print(err)
+         } else {
+            cmd_chans.Out() <- reply
+         }        
+    }
+}