Example #1
0
File: cl.go Project: zenoss/rog-go
func interactive(c *g9pc.Client) {
	reader, ok := bufio.NewReaderSize(os.Stdin, 8192)
	if ok != nil {
		fmt.Fprintf(os.Stderr, "can't create reader buffer: %s\n", ok)
	}
	done := make(chan error)
	go func() {
		e := c.Wait()
		fmt.Printf("wait finished (%v)\n", e)
		done <- e
	}()
loop:
	for {
		select {
		case e := <-done:
			fmt.Fprintf(os.Stderr, "server: %v\n", e)
			break loop
		default:
		}
		fmt.Print(*prompt)
		line, ok := reader.ReadSlice('\n')
		if ok != nil {
			fmt.Fprintf(os.Stderr, "exiting...\n")
			break
		}
		str := strings.TrimSpace(string(line))
		// TODO: handle larger input lines by doubling buffer
		in := strings.Split(str, "\n")
		for i := range in {
			if len(in[i]) > 0 {
				cmd(c, in[i])
			}
		}
	}
}