You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
970 B
43 lines
970 B
package network |
|
|
|
import ( |
|
"errors" |
|
"io" |
|
"sync" |
|
|
|
"git.hpds.cc/Component/network/frame" |
|
) |
|
|
|
// ErrStreamNil be returned if FrameStream underlying stream is nil. |
|
var ErrStreamNil = errors.New("hpdsMq: frame stream underlying is nil") |
|
|
|
// 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) frame.ReadWriter { |
|
return &FrameStream{stream: s} |
|
} |
|
|
|
// ReadFrame reads next frame from QUIC stream. |
|
func (fs *FrameStream) ReadFrame() (frame.Frame, error) { |
|
if fs.stream == nil { |
|
return nil, ErrStreamNil |
|
} |
|
return ParseFrame(fs.stream) |
|
} |
|
|
|
// WriteFrame writes a frame into QUIC stream. |
|
func (fs *FrameStream) WriteFrame(frm frame.Frame) error { |
|
if fs.stream == nil { |
|
return ErrStreamNil |
|
} |
|
fs.mu.Lock() |
|
defer fs.mu.Unlock() |
|
_, err := fs.stream.Write(frm.Encode()) |
|
return err |
|
}
|
|
|