github.com/geofffranks/garden-linux@v0.0.0-20160715111146-26c893169cfa/iodaemon/link/writer.go (about) 1 package link 2 3 import ( 4 "encoding/gob" 5 "net" 6 ) 7 8 type Input struct { 9 StdinData []byte 10 EOF bool 11 WindowSize *WindowSize 12 Msg []byte 13 } 14 15 type WindowSize struct { 16 Columns int 17 Rows int 18 } 19 20 type Writer struct { 21 conn net.Conn 22 enc *gob.Encoder 23 } 24 25 func NewWriter(conn net.Conn) *Writer { 26 return &Writer{conn: conn, enc: gob.NewEncoder(conn)} 27 } 28 29 func (w *Writer) TerminateConnection() error { 30 return w.conn.Close() 31 } 32 33 func (w *Writer) Write(d []byte) (int, error) { 34 err := w.enc.Encode(Input{StdinData: d}) 35 if err != nil { 36 return 0, err 37 } 38 39 return len(d), nil 40 } 41 42 func (w *Writer) Close() error { 43 return w.enc.Encode(Input{EOF: true}) 44 } 45 46 func (w *Writer) SetWindowSize(cols, rows int) error { 47 return w.enc.Encode(Input{ 48 WindowSize: &WindowSize{ 49 Columns: cols, 50 Rows: rows, 51 }, 52 }) 53 } 54 55 func (w *Writer) SendMsg(msg []byte) error { 56 return w.enc.Encode(Input{ 57 Msg: msg, 58 }) 59 }