From ddd2027739b0f8bafb36f470236d2a77320d805b Mon Sep 17 00:00:00 2001 From: Hornwitser Date: Fri, 13 Mar 2020 21:52:39 +0100 Subject: [PATCH] Handle errors during instance startup Catch errors and shut down the instance in question if the startup failed. This happens if for example the Factorio server errors out on a script during startup. --- client.js | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/client.js b/client.js index d4b18ff7..725d185f 100644 --- a/client.js +++ b/client.js @@ -567,14 +567,33 @@ class Slave extends link.Link { } async startInstanceRequestHandler(message, request) { - let instanceConnection = await this._connectInstance(message.data.instance_id); - return await request.send(instanceConnection, message.data); + let instanceId = message.data.instance_id; + let instanceConnection = await this._connectInstance(instanceId); + try { + return await request.send(instanceConnection, message.data); + + } catch (err) { + await this.stopInstance(instanceId); + throw err; + } } async createSaveRequestHandler(message, request) { let instanceId = message.data.instance_id; let instanceConnection = await this._connectInstance(instanceId); - await request.send(instanceConnection, message.data); + try { + await request.send(instanceConnection, message.data); + this.instanceConnections.delete(instanceId); + + } catch (err) { + await this.stopInstance(instanceId); + throw err; + } + } + + async stopInstance(instanceId) { + let instanceConnection = this.instanceConnections.get(instanceId); + await link.messages.stopInstance.send(instanceConnection, { instance_id: instanceId }); this.instanceConnections.delete(instanceId); }