network/frame_stream.go

43 lines
931 B
Go
Raw Normal View History

2022-10-11 17:36:09 +08:00
package network
import (
"errors"
"io"
"sync"
"git.hpds.cc/Component/network/frame"
)
// FrameStream is the QUIC Stream with the minimum unit Frame.
type FrameStream struct {
// Stream is a QUIC stream.
stream io.ReadWriter
mu sync.Mutex
}
// NewFrameStream creates a new FrameStream.
func NewFrameStream(s io.ReadWriter) *FrameStream {
return &FrameStream{
stream: s,
mu: sync.Mutex{},
}
}
// ReadFrame reads next frame from QUIC stream.
func (fs *FrameStream) ReadFrame() (frame.Frame, error) {
if fs.stream == nil {
return nil, errors.New("network.ReadStream: stream can not be nil")
}
return ParseFrame(fs.stream)
}
// WriteFrame writes a frame into QUIC stream.
func (fs *FrameStream) WriteFrame(f frame.Frame) (int, error) {
if fs.stream == nil {
return 0, errors.New("network.WriteFrame: stream can not be nil")
}
fs.mu.Lock()
defer fs.mu.Unlock()
return fs.stream.Write(f.Encode())
}