36 lines
641 B
Go
36 lines
641 B
Go
|
package packet
|
||
|
|
||
|
import (
|
||
|
"io"
|
||
|
|
||
|
"github.com/googollee/go-socket.io/engineio/frame"
|
||
|
)
|
||
|
|
||
|
// FrameReader is the reader which supports framing.
|
||
|
type FrameReader interface {
|
||
|
NextReader() (frame.Type, io.ReadCloser, error)
|
||
|
}
|
||
|
|
||
|
type Decoder struct {
|
||
|
r FrameReader
|
||
|
}
|
||
|
|
||
|
func NewDecoder(r FrameReader) *Decoder {
|
||
|
return &Decoder{
|
||
|
r: r,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (e *Decoder) NextReader() (frame.Type, Type, io.ReadCloser, error) {
|
||
|
ft, r, err := e.r.NextReader()
|
||
|
if err != nil {
|
||
|
return 0, 0, nil, err
|
||
|
}
|
||
|
var b [1]byte
|
||
|
if _, err := io.ReadFull(r, b[:]); err != nil {
|
||
|
_ = r.Close()
|
||
|
return 0, 0, nil, err
|
||
|
}
|
||
|
return ft, ByteToPacketType(b[0], ft), r, nil
|
||
|
}
|