Add option to throw on non-empty RCON responses

Add option to FactorioServer.sendRcon to throw on non-empty responses
from Factorio.  This is useful for detecting errors returned by commands
that should not have a response.
This commit is contained in:
Hornwitser committed 2020-01-04 17:34:16 +01:00
1 parent f88e1f1d3a
commit 221dc855f4
3 files changed
+17 -3

No files matched your search

+9 -2
View File
@@ -625,15 +625,22 @@ class FactorioServer extends events.EventEmitter {
* wait until it is establied and then send the message.
*
* @param {string} message - message to send to server over RCON.
* @param {boolean} expectEmpty -
* if true throw if the response is not empty. Useful for detecting
* errors that might have been sent in response.
* @returns {string} response from server.
*/
async sendRcon(message) {
async sendRcon(message, expectEmpty) {
this._check(["running"])
if (!this._rconReady) {
await events.once(this, 'rcon-ready');
}
return await this._rconClient.send(message);
let response = await this._rconClient.send(message);
if (expectEmpty && response !== '') {
throw new Error(`Expected empty response but got "${response}"`);
}
return response;
}
/**
+1 -1
View File
@@ -34,7 +34,7 @@ class InstancePlugin extends plugin.BaseInstancePlugin {
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('${escapeLuaString(content)}')`);
await this.instance.server.sendRcon(`/sc game.print('${escapeLuaString(content)}')`, true);
}
async onOutput(output) {
+7
View File
@@ -129,6 +129,13 @@ describe("Integration of lib/factorio/server", function() {
let result = await server.sendRcon("/sc rcon.print('success')");
assert.equal(result, 'success\n');
});
it("throws on non-empty response when enabled", async function() {
slowTest(this);
await assert.rejects(
server.sendRcon("/sc rcon.print('fail')", true),
new Error('Expected empty response but got "fail\n"')
);
});
});
describe(".stop()", function() {