11 var cmdHandler = map[string]func([]string,string,*bufio.ReadWriter ) {
13 "open":handleCmdController,
14 "close":handleCmdController,
15 "toggle":handleCmdController,
19 func readLineSafe(rw *bufio.Reader) (string, error) {
22 for isPrefix:=true;isPrefix; {
25 lineBuf,isPrefix,err = rw.ReadLine()
36 fmt.Println("line too long")
37 //fmt.Fprintf(rw,"line too long\n")
44 func connToReadWriter(c io.Reader,cw io.Writer) (*bufio.ReadWriter) {
45 client_r := bufio.NewReaderSize(c,1024)
46 client_w := bufio.NewWriterSize(cw,1024)
47 return bufio.NewReadWriter(client_r,client_w)
50 func handleConnection(c net.Conn) () {
51 client:=connToReadWriter(c,c)
52 fmt.Println("new connection")
54 line,err:=readLineSafe(bufio.NewReader(client))
56 if err.Error() != "EOF" {
57 fmt.Printf("Error: readLineSafe returned %v\n",err.Error())
59 fmt.Printf("Connection closed by remote host\n");
67 fmt.Printf("Received: %v\n", line)
68 tokens:=strings.Fields(line)
69 remainStr:=strings.Join(tokens[1:]," ")
70 handleCmd(tokens,remainStr,client)
74 func handleCmd(tokens []string, remainStr string,client * bufio.ReadWriter) {
76 func_ptr,present := cmdHandler[cmd]
78 func_ptr(tokens, remainStr,client)
80 fmt.Printf("Error: unknown Cmd: %v\n", cmd)
84 func handleCmdTest(tokens []string, remainStr string, client * bufio.ReadWriter) {
86 fmt.Printf("Test: %v\n", remainStr)
89 func handleCmdController(tokens []string, remainStr string, client * bufio.ReadWriter) {
91 s_r:=strings.NewReader(cmd)
92 char := make([]byte,1)
94 fmt.Println(string(char))
98 func openTTY(name string) *os.File {
99 file, err := os.OpenFile(name,os.O_RDWR ,0600) // For read access.
101 fmt.Println(err.Error())
103 termios.Ttyfd(file.Fd())
108 fmt.Fprintf(os.Stderr, "usage: myprog [inputfile]\n")
113 func SerialWriter(c chan string, serial * os.File ) {
115 serial.WriteString(<-c)
120 func SerialReader(c chan string , serial * bufio.Reader) {
122 s,err := readLineSafe(serial)
127 fmt.Printf("Error in read from serial: %v\n",err.Error())
130 fmt.Printf("Serial: Read %v\n",s);
135 func openSerial(filename string) (chan string,chan string) {
136 serial:=openTTY(filename)
137 in:=make(chan string)
138 out:=make(chan string)
139 //go SerialWriter(out,serial)
140 go SerialReader(in,bufio.NewReaderSize(serial,128))
144 func SerialHandler(serial_i chan string) {
146 fmt.Printf("Serial said: %v\n",<-serial_i);
155 fmt.Println("Input file is missing.");
158 ln, err := net.Listen("unix", "/tmp/test.sock")
160 fmt.Printf("Error: %s\n",err.Error())
163 fmt.Printf("Listener started\n")
165 serial_i,serial_o:=openSerial(args[0])
166 go SerialHandler(serial_i)
170 conn, err := ln.Accept()
175 go handleConnection(conn)