package packet import ( "io" "github.com/googollee/go-socket.io/engineio/frame" ) // FrameWriter is the writer which supports framing. type FrameWriter interface { NextWriter(typ frame.Type) (io.WriteCloser, error) } type Encoder struct { w FrameWriter } func NewEncoder(w FrameWriter) *Encoder { return &Encoder{ w: w, } } func (e *Encoder) NextWriter(ft frame.Type, pt Type) (io.WriteCloser, error) { w, err := e.w.NextWriter(ft) if err != nil { return nil, err } var b [1]byte if ft == frame.String { b[0] = pt.StringByte() } else { b[0] = pt.BinaryByte() } if _, err := w.Write(b[:]); err != nil { w.Close() return nil, err } return w, nil }