Skip to content
Snippets Groups Projects
Commit 28b1056a authored by Marin Karamihalev's avatar Marin Karamihalev
Browse files

more event handlers and two options for closing connection

parent 5b6ab417
No related branches found
No related tags found
No related merge requests found
Pipeline #35081 passed
......@@ -96,6 +96,12 @@ const buildConnect: BuildConnectionFn =
const callbackRouter = makeCallbackRouter();
const handleError = (err: any) =>
events && events.onError && events.onError(err);
const handleOffline = () =>
events && events.onOffline && events.onOffline();
const handleReconnect = () =>
events && events.onReconnect && events.onReconnect();
const handleClose = () => events && events.onClose && events.onClose();
callbackRouter.add("error", handleError);
const client = await connectClient(options);
......@@ -136,11 +142,30 @@ const buildConnect: BuildConnectionFn =
});
});
let reconnectCount = 0;
const isTrackingReconnects =
typeof options.reconnectsBeforeClosing === "number";
client.on("error", (err) => {
callbackRouter.get("error").forEach((cb) => cb(err));
handleError(JSON.stringify(err, null, 2));
});
client.on("offline", handleOffline);
client.on("reconnect", () => {
handleReconnect();
if (isTrackingReconnects) reconnectCount++;
});
client.on("close", () => {
handleClose();
if (options.closeOnDisconnect === true) client.end();
if (
isTrackingReconnects &&
reconnectCount > (options.reconnectsBeforeClosing as number)
)
client.end();
});
const on: OnFn = (ident, callback) => {
callbackRouter.add(ident, callback);
return () => {
......
......@@ -442,6 +442,8 @@ export interface OtherConnectionOptions {
ca?: CertType | Object[];
key?: CertType;
cert?: CertType;
closeOnDisconnect?: boolean;
reconnectsBeforeClosing?: number;
}
export type ConnectionOptions = URLConnectionOptions | HostConnectionOptions;
......@@ -479,6 +481,9 @@ export type CommandObject = {
export interface ConnectionEvents {
onError?: (err: string) => void;
onOffline?: () => void;
onReconnect?: () => void;
onClose?: () => void;
}
export interface RecipeObject {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment