58 lines
2.2 KiB
JavaScript
58 lines
2.2 KiB
JavaScript
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const path_1 = __importDefault(require("path"));
|
|
const realm_1 = require("./models/realm");
|
|
const checkBrokenConnections_1 = require("./services/checkBrokenConnections");
|
|
const messagesExpire_1 = require("./services/messagesExpire");
|
|
const webSocketServer_1 = require("./services/webSocketServer");
|
|
const messageHandler_1 = require("./messageHandler");
|
|
const api_1 = require("./api");
|
|
exports.createInstance = ({ app, server, options }) => {
|
|
const config = options;
|
|
const realm = new realm_1.Realm();
|
|
const messageHandler = new messageHandler_1.MessageHandler(realm);
|
|
const api = api_1.Api({ config, realm, messageHandler });
|
|
const messagesExpire = new messagesExpire_1.MessagesExpire({ realm, config, messageHandler });
|
|
const checkBrokenConnections = new checkBrokenConnections_1.CheckBrokenConnections({
|
|
realm,
|
|
config,
|
|
onClose: client => {
|
|
app.emit("disconnect", client);
|
|
}
|
|
});
|
|
app.use(options.path, api);
|
|
//use mountpath for WS server
|
|
const customConfig = Object.assign(Object.assign({}, config), { path: path_1.default.posix.join(app.path(), options.path, '/') });
|
|
const wss = new webSocketServer_1.WebSocketServer({
|
|
server,
|
|
realm,
|
|
config: customConfig
|
|
});
|
|
wss.on("connection", (client) => {
|
|
const messageQueue = realm.getMessageQueueById(client.getId());
|
|
if (messageQueue) {
|
|
let message;
|
|
while ((message = messageQueue.readMessage())) {
|
|
messageHandler.handle(client, message);
|
|
}
|
|
realm.clearMessageQueue(client.getId());
|
|
}
|
|
app.emit("connection", client);
|
|
});
|
|
wss.on("message", (client, message) => {
|
|
app.emit("message", client, message);
|
|
messageHandler.handle(client, message);
|
|
});
|
|
wss.on("close", (client) => {
|
|
app.emit("disconnect", client);
|
|
});
|
|
wss.on("error", (error) => {
|
|
app.emit("error", error);
|
|
});
|
|
messagesExpire.startMessagesExpiration();
|
|
checkBrokenConnections.start();
|
|
};
|