Documentation
¶
Overview ¶
Package msg defines the io variants of the github.com/blitz-frost/msg interfaces, as well as several implementation utilities.
See the Packet type family for a quick way to adapt io, stream based functionality to a discrete message based one.
Index ¶
- func ConnAsyncOf(c Conn) (msg.ConnBlock[Reader, Writer], error)
- func ConnOf(mc MultiplexConn, ch byte) msg.ConnBlock[Reader, Writer]
- func ExchangeConnOf(rExc, wExc Conn) (msg.ConnBlock[ExchangeReader, ExchangeWriter], error)
- type Buffer
- type BufferGiver
- type Conn
- type Demultiplexer
- type ExchangeConn
- type ExchangeReader
- type ExchangeReaderChainer
- type ExchangeReaderTaker
- type ExchangeWriter
- type ExchangeWriterGiver
- type MultiplexConn
- type Multiplexer
- type PacketConn
- type PacketReader
- type PacketReaderChainer
- type PacketWriter
- type PacketWriterGiver
- type Reader
- type ReaderChainer
- type ReaderChainerAsync
- type ReaderGiver
- type ReaderTaker
- type Void
- type WriteCanceler
- type Writer
- type WriterGiver
- type WriterGiverMutex
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ExchangeConnOf ¶
func ExchangeConnOf(rExc, wExc Conn) (msg.ConnBlock[ExchangeReader, ExchangeWriter], error)
The connections for the reader and writer side must be distinct.
Types ¶
type Buffer ¶
type Buffer struct {
// contains filtered or unexported fields
}
A Buffer accumulates writes before forwading them in a single call when closing. The internal buffer will be grown as needed. It is generally more efficient to reuse a Buffer rather than always allocating a new one.
func BufferMake ¶ added in v0.2.8
func (*Buffer) WriterTake ¶
WriterTake sets the Buffer to write to a new destination. It does not reset the internal buffer, nor close the old destination. Never returns an error.
type BufferGiver ¶
type BufferGiver struct {
// contains filtered or unexported fields
}
A BufferGiver wraps a WriterGiver to give a Buffer instead. Reuses the same Buffer between calls.
func BufferGiverMake ¶ added in v0.2.7
func BufferGiverMake(wg WriterGiver, buf *Buffer) BufferGiver
buf may be nil, in which case a new *Buffer will be allocated.
func (BufferGiver) Writer ¶
func (x BufferGiver) Writer() (Writer, error)
The returned value is a *Buffer. Returns an interface in order to satisfy the WriterGiver interface.
type Demultiplexer ¶
type Demultiplexer interface {
ReaderChain(byte, ReaderTaker) error
}
A Demultiplexer chains incoming messages from particular channels to a respective destination.
func DemultiplexerOf ¶
func DemultiplexerOf(rc ReaderChainer) (Demultiplexer, error)
DemultiplexerOf wraps rc as a simple Demultiplexer implementation. MultiplexerOf should be used on the sending end. The returned value will also be a ReaderTaker.
type ExchangeConn ¶
type ExchangeConn = msg.Conn[ExchangeReader, ExchangeWriter]
type ExchangeReader ¶
type ExchangeReader interface { Reader WriterGiver }
type ExchangeReaderChainer ¶
type ExchangeReaderChainer = msg.ReaderChainer[ExchangeReader]
func ExchangeReaderChainerOf ¶
func ExchangeReaderChainerOf(c Conn) (ExchangeReaderChainer, error)
Note that an ExchangeReaderChainer and an ExchangeWriterGiver cannot be formed onto the same Conn simultaneously. Instead, the Conn must first be converted to a MultiplexConn, of which separate channels must be used. The returned value is also a ReaderTaker.
type ExchangeReaderTaker ¶
type ExchangeReaderTaker = msg.ReaderTaker[ExchangeReader]
type ExchangeWriter ¶
type ExchangeWriter interface { Writer ReaderGiver }
type ExchangeWriterGiver ¶
type ExchangeWriterGiver = msg.WriterGiver[ExchangeWriter]
func ExchangeWriterGiverOf ¶
func ExchangeWriterGiverOf(c Conn) (ExchangeWriterGiver, error)
Note that an ExchangeReaderChainer and an ExchangeWriterGiver cannot be formed onto the same Conn simultaneously. Instead, the Conn must first be converted to a MultiplexConn, of which separate channels must be used. The returned value is also a ReaderTaker.
type MultiplexConn ¶
type MultiplexConn interface { Demultiplexer Multiplexer }
func MultiplexConnOf ¶
func MultiplexConnOf(c Conn) (MultiplexConn, error)
The returned value will also be a ReaderTaker.
type Multiplexer ¶
A Multiplexer provides Writers to particular channels of a connection. A single byte is chosen for mapping, as it should be the easiest to implement while providing more than enough channels for most use cases.
func MultiplexerOf ¶
func MultiplexerOf(wg WriterGiver) Multiplexer
MultiplexerOf wraps wg as a simple Multiplexer implementation. DemultiplexerOf should be used on the receiving end.
type PacketConn ¶ added in v0.2.7
type PacketConn struct { *PacketReaderChainer PacketWriterGiver }
PacketConn is a convenience type to quickly obtain a Conn from an io.ReadWriter.
func PacketConnMake ¶ added in v0.2.7
func PacketConnMake(rw io.ReadWriter) PacketConn
type PacketReader ¶ added in v0.2.7
type PacketReader struct {
// contains filtered or unexported fields
}
PacketReader is a basic Reader implementation that can be used to adapt an io.Reader to this package's conventions. It must be used in tandem with a PacketWriter.
A PacketReader can be used to read a single message, and then must be discarded. Closing it does not close the underlying io.Reader.
It is an error to neither Close the PacketReader, nor read from it until EOF, and will very likely lead to undefined behaviour.
func PacketReaderMake ¶ added in v0.2.8
func PacketReaderMake(r io.Reader) *PacketReader
func (*PacketReader) Close ¶ added in v0.2.7
func (x *PacketReader) Close() error
Close discards any unread message data.
func (*PacketReader) Read ¶ added in v0.2.7
func (x *PacketReader) Read(b []byte) (int, error)
Read reads from the first encountered message into b.
Internally, a PacketReader will process as many packets as necessary to fulfill a Read. Callers need not concern themselves with packet size considerations.
type PacketReaderChainer ¶ added in v0.2.7
type PacketReaderChainer struct {
// contains filtered or unexported fields
}
A PacketReaderChainer adapts an io.Reader to a ReaderChainer. The passed Readers will be PacketReaders, thus the write side must use PacketWriters.
Inactive until the Listen method is used.
func PacketReaderChainerMake ¶ added in v0.2.8
func PacketReaderChainerMake(r io.Reader) *PacketReaderChainer
func (*PacketReaderChainer) Listen ¶ added in v0.2.7
func (x *PacketReaderChainer) Listen() error
Listen executes a message receiving loop. It will only return on chained ReaderTaker error.
func (*PacketReaderChainer) ReaderChain ¶ added in v0.2.7
func (x *PacketReaderChainer) ReaderChain(rt ReaderTaker) error
type PacketWriter ¶ added in v0.2.7
type PacketWriter struct {
// contains filtered or unexported fields
}
PacketWriter is a basic Writer implementation that can be used to adapt an io.Writer to this package's conventions. It must be used in tandem with a PacketReader.
A PacketWriter can be used to write a single message (up to the first Close method call), and then must be discarded. Closing it does not close the underling io.Writer.
func PacketWriterMake ¶ added in v0.2.8
func PacketWriterMake(w io.Writer) *PacketWriter
func (*PacketWriter) Close ¶ added in v0.2.7
func (x *PacketWriter) Close() error
Close terminates the message. Any subsequent Write calls will NoOp. If no valid Write calls had ever been made before closing, the message is effectively aborted (i.e. a PacketReader will not see a empty messages).
type PacketWriterGiver ¶ added in v0.2.7
A PacketWriterGiver wraps an io.Writer to function as a WriterGiver. The returned Writers will be PacketWriters, thus the read side must use PacketReaders.
func (PacketWriterGiver) Writer ¶ added in v0.2.7
func (x PacketWriterGiver) Writer() (Writer, error)
type ReaderChainer ¶
type ReaderChainer = msg.ReaderChainer[Reader]
func ReaderChainerOf ¶
func ReaderChainerOf(d Demultiplexer, ch byte) ReaderChainer
type ReaderChainerAsync ¶
type ReaderChainerAsync struct {
// contains filtered or unexported fields
}
ReaderChainerAsync wraps a ReaderChainer to chain asynchronously. Its ReaderTake method will return once the chained Reader is closed. Must not be used if the ReaderChainer can start multiple concurrent chains.
func ReaderChainerAsyncMake ¶ added in v0.2.8
func ReaderChainerAsyncMake(rc ReaderChainer) (*ReaderChainerAsync, error)
func (*ReaderChainerAsync) ReaderChain ¶
func (x *ReaderChainerAsync) ReaderChain(rt ReaderTaker) error
Never returns an error.
func (*ReaderChainerAsync) ReaderTake ¶
func (x *ReaderChainerAsync) ReaderTake(r Reader) error
Never returns an error.
type ReaderGiver ¶
type ReaderGiver = msg.ReaderGiver[Reader]
type ReaderTaker ¶
type ReaderTaker = msg.ReaderTaker[Reader]
type WriteCanceler ¶
type WriterGiver ¶
type WriterGiver = msg.WriterGiver[Writer]
func WriterGiverOf ¶
func WriterGiverOf(m Multiplexer, ch byte) WriterGiver
type WriterGiverMutex ¶
type WriterGiverMutex struct {
// contains filtered or unexported fields
}
WriterGiverMutex wraps a WriterGiver to block while a provided Writer is in active use, making it concurrent safe. Unblocks when the Writer is closed.
func WriterGiverMutexMake ¶ added in v0.2.8
func WriterGiverMutexMake(wg WriterGiver) *WriterGiverMutex
func (*WriterGiverMutex) Writer ¶
func (x *WriterGiverMutex) Writer() (Writer, error)