added client to cmd dispatcher
[svn42.git] / door_daemon_go / unix_socket_server.go
index a2e710a..1d5424b 100644 (file)
@@ -2,6 +2,12 @@ package main
 import "fmt"
 import "net"
 import "bufio"
+import "strings"
+
+var cmdHandler = map[string]func([]string,string,*bufio.ReadWriter ) {
+  "test":handleCmdTest,
+}
+
 
 func readLineSafe(rw *bufio.ReadWriter) (string, error) {
   wasPrefix:=false
@@ -40,17 +46,38 @@ func handleConnection(c net.Conn) () {
     for {
          line,err:=readLineSafe(client)
          if err != nil {
-          fmt.Println(err.Error())
+          if err.Error() != "EOF" {
+            fmt.Printf("Error: readLineSafe returned %v\n",err.Error())
+          } else {
+            fmt.Printf("Connection closed by remote host\n");
+          }
           c.Close()
           return
          }
          if line == "" {
            continue
          }
-         fmt.Printf("Received: %v\n", string(line))
+         fmt.Printf("Received: %v\n", line)
+         tokens:=strings.Fields(line)
+         remainStr:=strings.Join(tokens[1:]," ")
+         handleCmd(tokens,remainStr,client)
     }
 }
 
+func handleCmd(tokens []string, remainStr string,client * bufio.ReadWriter) {
+  cmd:=tokens[0]
+  func_ptr,present := cmdHandler[cmd]
+  if present {
+    func_ptr(tokens, remainStr,client)
+  } else {
+    fmt.Printf("Error: unknown Cmd: %v\n", cmd)
+  }
+}
+
+func handleCmdTest(tokens []string, remainStr string, client * bufio.ReadWriter) {
+  //cmd:=tokens[0]
+  fmt.Printf("Test: %v\n", remainStr)
+}
 
 func main() {
   ln, err := net.Listen("unix", "/tmp/test.sock")