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
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.
trait representing a decoded message that is actually a stream
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.