9 var cmdHandler = map[string]func([]string,string,*bufio.ReadWriter ) {
11 "open":handleCmdController,
12 "close":handleCmdController,
13 "toggle":handleCmdController,
17 func readLineSafe(rw *bufio.ReadWriter) (string, error) {
20 for isPrefix:=true;isPrefix; {
23 lineBuf,isPrefix,err = rw.ReadLine()
34 fmt.Println("line too long")
35 fmt.Fprintf(rw,"line too long\n")
42 func connToReadWriter(c io.Reader,cw io.Writer) (*bufio.ReadWriter) {
43 client_r := bufio.NewReaderSize(c,14)
44 client_w := bufio.NewWriterSize(cw,14)
45 return bufio.NewReadWriter(client_r,client_w)
48 func handleConnection(c net.Conn) () {
49 client:=connToReadWriter(c,c)
50 fmt.Println("new connection")
52 line,err:=readLineSafe(client)
54 if err.Error() != "EOF" {
55 fmt.Printf("Error: readLineSafe returned %v\n",err.Error())
57 fmt.Printf("Connection closed by remote host\n");
65 fmt.Printf("Received: %v\n", line)
66 tokens:=strings.Fields(line)
67 remainStr:=strings.Join(tokens[1:]," ")
68 handleCmd(tokens,remainStr,client)
72 func handleCmd(tokens []string, remainStr string,client * bufio.ReadWriter) {
74 func_ptr,present := cmdHandler[cmd]
76 func_ptr(tokens, remainStr,client)
78 fmt.Printf("Error: unknown Cmd: %v\n", cmd)
82 func handleCmdTest(tokens []string, remainStr string, client * bufio.ReadWriter) {
84 fmt.Printf("Test: %v\n", remainStr)
87 func handleCmdController(tokens []string, remainStr string, client * bufio.ReadWriter) {
89 s_r:=strings.NewReader(cmd)
90 char := make([]byte,1)
92 fmt.Println(string(char))
96 func openTTY(name string) *bufio.ReadWriter{
97 file, err := os.OpenFile(name,os.O_RDWR ,0600) // For read access.
99 fmt.Println(err.Error())
101 return connToReadWriter(file,file)
105 serial:=openTTY("tty")
106 serial.WriteString("foo")
108 ln, err := net.Listen("unix", "/tmp/test.sock")
110 fmt.Printf("Error: %s\n",err.Error())
113 fmt.Printf("Listener started\n")
115 conn, err := ln.Accept()
120 go handleConnection(conn)