-
Notifications
You must be signed in to change notification settings - Fork 222
A brief description of internals
Notify really is a box with two public sides: the frontend, with which most people interact, and the backend, which is the purview of implementors. Notify specifies what a backend should do, and what it will be provided. It then manages backends to provide its frontend interface.
Inside the box, there are several components and layers:
-
Lives directly wrap a single backend, and are what provides the backend interface. They are responsible for hooking up event streams to a backend when it's live, and keeping them ready when it's not. A Life is stateful, a Backend is not, and that is where that difference is managed.
-
The Manager allocates Lives as supported by the platform, and then commands those lives to watch paths or not. It receives events from any and all Lives, and builds a single stream to be consumed from them all. It also starts and hooks up Processors as needed.
-
Processors watch the event stream filtered by the events' Backend's (lack of) capabilities. A Processor issues commands to the Manager in response, to simulate a particular capability for a Backend that doesn't support it natively, or add advanced features like event debouncing.
-
The Interfaces wrap the Manager again, exposing only what the public API requires and abstracting away some of the details, for example the startup sequence. There's currently two Interfaces: the default Future-based API, and the Future-less API which hides the Future-ful reality behind a more classic channel-and-thread approach.