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  }