func (c *Client) readLoop(done chan bool) { for { _, data, err := c.Conn.ReadMessage() if err != nil { done <- true logrus.Warnf("c.Conn.ReadMessage: %v", err) return } switch data[0] { case '0': // data buf, err := base64.StdEncoding.DecodeString(string(data[1:])) if err != nil { logrus.Warnf("Invalid base64 content: %q", data[1:]) } fmt.Print(string(buf)) case '1': // pong case '2': // new title newTitle := string(data[1:]) fmt.Printf("\033]0;%s\007", newTitle) case '3': // json prefs logrus.Debugf("Unhandled protocol message: json pref: %s", string(data)) case '4': // autoreconnect logrus.Debugf("Unhandled protocol message: autoreconnect: %s", string(data)) default: logrus.Warnf("Unhandled protocol message: %s", string(data)) } } }
func (c *Client) termsizeLoop(done chan bool) { ch := make(chan os.Signal, 1) signal.Notify(ch, syscall.SIGWINCH) ws := winsize{} for { syscall.Syscall(syscall.SYS_IOCTL, uintptr(0), uintptr(syscall.TIOCGWINSZ), uintptr(unsafe.Pointer(&ws))) b, err := json.Marshal(ws) if err != nil { logrus.Warnf("json.Marshal error: %v", err) } err = c.Conn.WriteMessage(websocket.TextMessage, append([]byte("2"), b...)) if err != nil { logrus.Warnf("ws.WriteMessage failed: %v", err) } <-ch } }