-
Notifications
You must be signed in to change notification settings - Fork 0
Home
viae is a middleware framework, like express, hapi and koa. The primary difference with viae is that the communication medium is abstracted; also, both the client and server can have APIs. i.e. Servers can make requests to clients.
A wire connection is an interface of the form:
interface Wire {
sid?: string;
address?: string;
send(data: ArrayBuffer): void;
close();
on(event: "message", cb: (data: ArrayBuffer) => void): void;
on(event: "close", cb: () => void): void;
on(event: "error", cb: (err: any) => void): void;
[index: string]: any;
}apart from the (optional) sid and address fields, this interface matches that of the standard WebSocket class.
the WireServer interface has the form:
interface WireServer {
on(event: "connection", cb: (connection: Wire) => void);
}Which is also implemented by the ws npm module by default. You don't have to use WebSockets and if you are so inclined you can implement these interfaces using a different communication medium.
Implementation of the Session ID (sid) and the Remote Address is optional. Neither are implemented by default by WebSocket.
The main workhorse is the Via class, which directs the sending and receiving of messages.
import {Via} from 'viae';
let via = new Via(/*[optional] wire */);When a message package is received from the wire the following sequence occurs:
- Deserialise and Create a Context;
- Process the Context through
- the
beforemiddleware, then - the
streamermiddleware, then - the
interceptormiddleware, then - the
appmiddleware, then - the
unhandledmiddleware.
- the
- Clear the
_doneflag - Process the Context through the
aftermiddleware.
the before middleware allows you to examine the context immediately after deserialisation and before any handling of the context. By default it is empty and you can add handlers to it like so:
via.before((ctx: ViaContext) => {
});
returning false here will actually terminate any further general processing on the context - it will be processed by the after middleware.