Triggers
Triggers allow you to overwrite specific functionality of Core which would otherwise be hard to modify and require you to touch the internals. Triggers are simply names that are associated with a function that Core will call when a trigger is fired.
We ship with a few default triggers like validateBlock
, validateTransaction
and acceptPeer
. If you are running a fork or working on a bridgechain and plan to overwrite them you should stick around as we go into more details.
Architecture
The Trigger service consists of two entities - the Triggers and Action class. The Triggers class is responsible for storing all triggers associated with their action. The Action class is responsible for storing all information about an action, like what function and hooks should be executed.
When you call a Trigger it will tell its associated Action to execute and return the output of it for further processing by the application. If you don’t need the return value you can simple call a Trigger and ignore its return value.
Creating A Trigger
Creating a trigger is as simple as passing in a name and a function to the bind
method. The given function will be called when a trigger with the given name is requested.
1app2 .get<Services.Triggers.Triggers>(Identifiers.Services.Trigger.Service)3 .bind("log", (message: string) => console.log(message));
Triggering An Action
Calling a trigger is just as simple as creating it, simply pass in the name of the trigger to the call
method together with any arguments that should be passed to it.
1app2 .get<Services.Triggers.Triggers>(Identifiers.Services.Trigger.Service)3 .call("log", "Hello World");
Hooking Into An Action
Sometimes it might be necessary to perform some tasks before or after an action is executed and also handle the case of a failure. There are 3 methods available that allow you to specify functions that should be called before
, on error
and after
an action has been executed.
before
hook
The The before
hook is executed before an action is executed. This will always be executed.
1app2 .get<Services.Triggers.Triggers>(Identifiers.Services.Trigger.Service)3 .bind("log", (message: string) => console.log(message))4 .before(() => console.log("I am running before the action!"));
error
hook
The The error
hook is executed when an exception is caught while the action is executed. This will only be executed if the action itself does not handle the exception.
1app2 .get<Services.Triggers.Triggers>(Identifiers.Services.Trigger.Service)3 .bind("log", (message: string) => console.log(message))4 .error(() => console.log("I am running if the action encounters an error!"));
after
hook
The The after
hook is executed after an action has been executed. This will always be executed, even if any errors are encountered.
1app2 .get<Services.Triggers.Triggers>(Identifiers.Services.Trigger.Service)3 .bind("log", (message: string) => console.log(message))4 .after(() => console.log("I am running after the action!"));