@xpresser/events-server
Version:
Xpresser's Official Events Server Plugin.
119 lines (118 loc) • 4.97 kB
JavaScript
"use strict";
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
};
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
var _EventsServerCommunicator_secretKey;
const net_1 = require("net");
const functions_1 = require("./functions");
const EventsServerDb_1 = __importDefault(require("./EventsServerDb"));
const nanoid_1 = require("nanoid");
const PlaneSocket_1 = __importDefault(require("./PlaneSocket"));
class EventsServerCommunicator {
constructor(secretKey, $, name) {
_EventsServerCommunicator_secretKey.set(this, void 0);
this.isConnected = false;
if (!secretKey)
$.logErrorAndExit("secretKey is required");
// Set Secret Key
__classPrivateFieldSet(this, _EventsServerCommunicator_secretKey, (0, functions_1.md5)(secretKey), "f");
// Set Db
this.db = new EventsServerDb_1.default($, true);
// set name if provided
if (name)
this.name = name;
// Set xpr instance.
this.$ = $;
}
connect(onAuthorized, onError) {
const $ = this.$;
const port = $.config.get("eventsServer.port");
const server = $.config.get("eventsServer.server");
const keepAlive = $.config.get("eventsServer.keepAlive");
const ps = new PlaneSocket_1.default(() => {
const socket = (0, net_1.connect)({ port, host: server });
socket.on("connect", () => {
ps.emit("Authorize", { secretKey: __classPrivateFieldGet(this, _EventsServerCommunicator_secretKey, "f"), name: this.name });
});
socket.on("error", (err) => {
this.isConnected = false;
if (onError)
onError(err);
if (!$.options.isConsole) {
$.logError(`Failed to connect to EventsServer @ port: ${port}`);
}
});
socket.on("end", () => {
this.isConnected = false;
$.logWarning(`Disconnected from Events Server @ ${(0, functions_1.now)()}`);
// socket.offAny();
});
return socket;
});
if (keepAlive) {
ps.$keepAlive();
}
ps.on(`Authorized:${__classPrivateFieldGet(this, _EventsServerCommunicator_secretKey, "f")}`, () => {
this.isConnected = true;
if (onAuthorized)
onAuthorized();
if (!$.options.isConsole) {
$.logInfo(`Connected to Events Server @ (${port})`);
}
});
ps.on(`RemoveFromPending:${__classPrivateFieldGet(this, _EventsServerCommunicator_secretKey, "f")}`, (id) => {
const pendingEvents = this.db.pendingEvents();
if (!pendingEvents.has(id))
return this;
this.db.pendingEvents().unset(id);
return this.db.save(true);
});
Object.defineProperty(this, "socket", {
value: ps,
enumerable: false,
writable: false
});
ps.$setupListeners();
}
emit(event, ...args) {
if (this.isConnected) {
return this.socket.emit(event, ...args);
}
else {
this.db.recordPendingEvent({
event,
eventId: (0, nanoid_1.nanoid)(10),
args
});
}
}
push(event, ...args) {
this.db.recordPendingEvent({
event,
eventId: (0, nanoid_1.nanoid)(10),
args
}, true);
return this;
}
retryFailedEvents() {
if (this.isConnected) {
this.emit("$retryFailedEvents");
}
}
failedEvents() {
return this.db.failedEvents();
}
}
_EventsServerCommunicator_secretKey = new WeakMap();
module.exports = EventsServerCommunicator;