A Controller is a Connection handler that is designed to work with connections involving decoding raw bytes into input messages and encoding output messages into bytes.
Configuration for the controller
The DataQueue is used only when processing a stream.
Wraps 2 sinks and will automatically begin reading from the second only when the first is empty.
A pipe designed to accept a fixed number of bytes
The InputController maintains all state dealing with reading in messages in a controller.
This is thrown anytime we hit a state that shouldn't be possible.
The base trait inherited by both InputController and OutputController and ultimately implemented by Controller.
The OutputController maintains all state dealing with writing messages in a controller.
An ADT representing the result of a pushing a message to write
A Pipe is a callback-based data transport abstraction meant for handling streams.
This is a special exception that Input/Output controllers look for when error handling pipes.
A Sink is the write side of a pipe.
A Source is the read side of a pipe.
When a user attempts to push a value into a pipe, and the pipe either fills or was already full, a Trigger is returned in the PushResult.