12 var cmdHandler = map[string]func([]string,string,*bufio.ReadWriter ) {
14 "open":handleCmdController,
15 "close":handleCmdController,
16 "toggle":handleCmdController,
20 func readLineSafe(rw *bufio.Reader) (string, error) {
23 for isPrefix:=true;isPrefix; {
26 lineBuf,isPrefix,err = rw.ReadLine()
37 fmt.Println("line too long")
38 //fmt.Fprintf(rw,"line too long\n")
42 reg := regexp.MustCompile("\r")
43 safe := reg.ReplaceAllString(line, "")
47 func connToReadWriter(c io.Reader,cw io.Writer) (*bufio.ReadWriter) {
48 client_r := bufio.NewReaderSize(c,1024)
49 client_w := bufio.NewWriterSize(cw,1024)
50 return bufio.NewReadWriter(client_r,client_w)
53 func handleConnection(c net.Conn) () {
54 client:=connToReadWriter(c,c)
55 fmt.Println("new connection")
57 line,err:=readLineSafe(bufio.NewReader(client))
59 if err.Error() != "EOF" {
60 fmt.Printf("Error: readLineSafe returned %v\n",err.Error())
62 fmt.Printf("Connection closed by remote host\n");
70 fmt.Printf("Received: %v\n", line)
71 tokens:=strings.Fields(line)
72 remainStr:=strings.Join(tokens[1:]," ")
73 handleCmd(tokens,remainStr,client)
77 func handleCmd(tokens []string, remainStr string,client * bufio.ReadWriter) {
79 func_ptr,present := cmdHandler[cmd]
81 func_ptr(tokens, remainStr,client)
83 fmt.Printf("Error: unknown Cmd: %v\n", cmd)
87 func handleCmdTest(tokens []string, remainStr string, client * bufio.ReadWriter) {
89 fmt.Printf("Test: %v\n", remainStr)
92 func handleCmdController(tokens []string, remainStr string, client * bufio.ReadWriter) {
94 s_r:=strings.NewReader(cmd)
95 char := make([]byte,1)
97 fmt.Println(string(char))
101 func openTTY(name string) *os.File {
102 file, err := os.OpenFile(name,os.O_RDWR ,0600) // For read access.
104 fmt.Println(err.Error())
106 termios.Ttyfd(file.Fd())
111 fmt.Fprintf(os.Stderr, "usage: myprog [inputfile]\n")
116 func SerialWriter(c chan string, serial * os.File ) {
118 serial.WriteString(<-c)
123 func SerialReader(c chan string , serial * bufio.Reader) {
125 s,err := readLineSafe(serial)
130 fmt.Printf("Error in read from serial: %v\n",err.Error())
133 //fmt.Printf("Serial: Read %v\n",s);
138 func openSerial(filename string) (chan string,chan string) {
139 serial:=openTTY(filename)
140 in:=make(chan string)
141 out:=make(chan string)
142 //go SerialWriter(out,serial)
143 go SerialReader(in,bufio.NewReaderSize(serial,128))
147 func SerialHandler(serial_i chan string) {
149 fmt.Printf("Serial Read: %s\n",<-serial_i);
158 fmt.Println("Input file is missing.");
161 ln, err := net.Listen("unix", "/tmp/test.sock")
163 fmt.Printf("Error: %s\n",err.Error())
166 fmt.Printf("Listener started\n")
168 serial_i,serial_o:=openSerial(args[0])
169 go SerialHandler(serial_i)
173 conn, err := ln.Accept()
178 go handleConnection(conn)