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()) }