mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-12 15:04:52 +09:00
Implement notification to plugins for disconnect request, connect, drop, and close. This allows plugins to properly handle slaves and the master server shutting down without sending messages that will get lost.
61 lines
1.3 KiB
JavaScript
61 lines
1.3 KiB
JavaScript
/**
|
|
* @module
|
|
*/
|
|
const plugin = require("lib/plugin");
|
|
const luaTools = require("lib/luaTools");
|
|
|
|
|
|
/**
|
|
* Removes gps and train tags from messags
|
|
*/
|
|
function removeTags(content) {
|
|
return content.replace(/(\[gps=-?\d+,-?\d+\]|\[train=\d+\])/g, "");
|
|
}
|
|
|
|
class InstancePlugin extends plugin.BaseInstancePlugin {
|
|
async init() {
|
|
this.messageQueue = [];
|
|
}
|
|
|
|
onMasterConnectionEvent(event) {
|
|
if (event === "connect") {
|
|
for (let message of this.messageQueue) {
|
|
this.sendChat(message);
|
|
}
|
|
this.messageQueue = [];
|
|
}
|
|
}
|
|
|
|
async chatEventHandler(message) {
|
|
// TODO check if cross server chat is enabled
|
|
let content = `[${message.data.instance_name}] ${removeTags(message.data.content)}`;
|
|
await this.instance.server.sendRcon(`/sc game.print('${luaTools.escapeString(content)}')`, true);
|
|
}
|
|
|
|
sendChat(message) {
|
|
this.info.messages.chat.send(this.instance, {
|
|
instance_name: this.instance.name,
|
|
content: message,
|
|
});
|
|
}
|
|
|
|
async onOutput(output) {
|
|
if (output.type === "action" && output.action === "CHAT") {
|
|
if (this.slave.connector.connected) {
|
|
this.sendChat(output.message);
|
|
} else {
|
|
this.messageQueue.push(output.message);
|
|
}
|
|
}
|
|
}
|
|
|
|
// TODO implement info command in lua?
|
|
}
|
|
|
|
module.exports = {
|
|
InstancePlugin,
|
|
|
|
// For testing only
|
|
_removeTags: removeTags,
|
|
}
|