Signals is an event-emitter-like library meant to be used across different node projects without setting up a websocket or a server, with the use of Firebase and soon can also be used with MongoDB
While this readme does cover most points, its reccomended to check out the documentation site
Simply just run:
$ npm i signalz
// Using Node.js `require()`
const Signalz = require("signalz");
// Using ES6 imports
import Signalz from "signalz";
Heres how to setup Signalz with the firebase method
First import firebase-admin and initialize firebase, this is explained further here
const firebase = require("firebase-admin");
const serviceAccount = require("./serviceAccountKey.json");
if (firebase.apps.length === 0) {
firebase.initializeApp({
credential: firebase.credential.cert(serviceAccount),
databaseURL: "YOUR_DB_URL",
});
}
Then initialize Signals itself:
const client = new Signalz.Client("CLIENT_ID", firebase.database());
Client ID is explained here
await client.sendSignal("SIGNAL_ID", "TARGET_CLIENT_ID", data);
// Data can be a number, string, boolean, or object.
Signal ID and Target Client ID are exmplaned here
client.on("signal", (signal) => {
// do stuff
});
After doing the code when receiving a signal, its a good practice to reply to that signal with a status of "accept" or "error" to make the other project know the status of the signal, optionally, you can add a message to the reply
client.on("signal", (signal) => {
// do stuff
signal.reply("accept", "good!");
// OR
signal.reply("error", "invalid yada yada");
// Message can be number, string, boolean, or object.
});
const sentSignal = await client.sendSignal(
"SIGNAL_ID",
"TARGET_CLIENT_ID",
data
);
sentSignal.awaitReply(60000).then((data) => {
console.log(data);
});
Its important that you end a signal after you are done with it, it is optional but very recommended as it frees up space from your database.
const sentSignal = await client.sendSignal(
"SIGNAL_ID",
"TARGET_CLIENT_ID",
data
);
sentSignal.awaitReply(60000).then((data) => {
console.log(data);
});
sentSignal.end();
OR
client.on("signal", (signal) => {
// do stuff
signal.reply("accept", "good!");
// OR
signal.reply("error", "invalid yada yada");
signal.end();
});
Term | Meaning |
---|---|
CLIENT_ID | This is used so signals can be targetted to only the project(s) with that client id |
TARGET_CLIENT_ID | You set this in the signal so the signal only goes to the projects with that client id |
SIGNAL_ID | This is a custom id that is passed when sending the the signal so the receiving end knows which type of signal its receiving |