7 var cmdHandler = map[string]func([]string,string,*bufio.ReadWriter ) {
12 func readLineSafe(rw *bufio.ReadWriter) (string, error) {
15 for isPrefix:=true;isPrefix; {
18 lineBuf,isPrefix,err = rw.ReadLine()
29 fmt.Println("line too long")
30 fmt.Fprintf(rw,"line too long\n")
37 func connToReadWriter(c net.Conn) (*bufio.ReadWriter) {
38 client_r := bufio.NewReaderSize(c,14)
39 client_w := bufio.NewWriterSize(c,14)
40 return bufio.NewReadWriter(client_r,client_w)
43 func handleConnection(c net.Conn) () {
44 client:=connToReadWriter(c)
45 fmt.Println("new connection")
47 line,err:=readLineSafe(client)
49 if err.Error() != "EOF" {
50 fmt.Printf("Error: readLineSafe returned %v\n",err.Error())
52 fmt.Printf("Connection closed by remote host\n");
60 fmt.Printf("Received: %v\n", line)
61 tokens:=strings.Fields(line)
62 remainStr:=strings.Join(tokens[1:]," ")
63 handleCmd(tokens,remainStr,client)
67 func handleCmd(tokens []string, remainStr string,client * bufio.ReadWriter) {
69 func_ptr,present := cmdHandler[cmd]
71 func_ptr(tokens, remainStr,client)
73 fmt.Printf("Error: unknown Cmd: %v\n", cmd)
77 func handleCmdTest(tokens []string, remainStr string, client * bufio.ReadWriter) {
79 fmt.Printf("Test: %v\n", remainStr)
83 ln, err := net.Listen("unix", "/tmp/test.sock")
85 fmt.Printf("Error: %s\n",err.Error())
88 fmt.Printf("Listener started\n")
90 conn, err := ln.Accept()
95 go handleConnection(conn)