Addressed remaining review comments

This commit is contained in:
Cooldude2606 committed 2024-03-08 22:00:38 +00:00
1 parent 8fbdb5dfab
commit 6f81216e7c
6 files changed
+33 -5

No files matched your search

+14
View File
@@ -301,6 +301,20 @@ local clusterio_api = require("modules/clusterio/api")
clusterio_api.send_json("my_plugin_foo", { data = 123 })
```
For convience a helper function is exposed on server specifically for handling IPC events.
```js
async init() {
this.instance.server.handle("my_plugin_foo", this.handleFoo.bind(this));
}
async handleFoo(content) {
// Do stuff with content
}
```
**Note:** This only handles IPC events, all other events must use `on`. You should not include the `ipc-` prefix when using this method. Error logging is handled for you, if you want custom error handling use `on`.
It's recommended to either use the plugin name as the channel name or to prefix the channel name with the name of the plugin if you need multiple channels.
It's also important to catch any errors that might occur as they will otherwise be propogated to the instance code and kill the server.
+8 -1
View File
@@ -90,7 +90,14 @@ const plugin = {
Messages.ExampleSubscribableUpdate,
//%endif
],
//%if controller | web // The controller always includes web entry even if there is no content
//%if web // Web content template has an example route which is the plugin name
webEntrypoint: "./web",
routes: [
"/__plugin_name__",
],
//%endif
//%if controller & !web // The controller always includes web entry even if there is no content
webEntrypoint: "./web",
routes: [],
@@ -8,7 +8,7 @@ class InstancePlugin extends BaseInstancePlugin {
this.instance.handle(PluginExampleEvent, this.handlePluginExampleEvent.bind(this));
this.instance.handle(PluginExampleRequest, this.handlePluginExampleRequest.bind(this));
//%if module
this.instance.server.handle("ipc-__plugin_name__-plugin_example_ipc", this.handlePluginExampleIPC.bind(this));
this.instance.server.handle("__plugin_name__-plugin_example_ipc", this.handlePluginExampleIPC.bind(this));
//%endif
}
+8 -1
View File
@@ -112,7 +112,14 @@ export const plugin: lib.PluginDeclaration = {
Messages.ExampleSubscribableUpdate,
//%endif
],
//%if controller | web // The controller always includes web entry even if there is no content
//%if web // Web content template has an example route which is the plugin name
webEntrypoint: "./web",
routes: [
"/__plugin_name__",
],
//%endif
//%if controller & !web // The controller always includes web entry even if there is no content
webEntrypoint: "./web",
routes: [],
@@ -14,7 +14,7 @@ export class InstancePlugin extends BaseInstancePlugin {
this.instance.handle(PluginExampleEvent, this.handlePluginExampleEvent.bind(this));
this.instance.handle(PluginExampleRequest, this.handlePluginExampleRequest.bind(this));
//%if module
this.instance.server.handle("ipc-__plugin_name__-plugin_example_ipc", this.handlePluginExampleIPC.bind(this));
this.instance.server.handle("__plugin_name__-plugin_example_ipc", this.handlePluginExampleIPC.bind(this));
//%endif
}
+1 -1
View File
@@ -564,7 +564,7 @@ export class FactorioServer extends events.EventEmitter {
// TODO at the moment this is just a helper function, it has the potential for schema checking
handle<Event>(eventName: string, handler: (event: Event) => Promise<void>) {
this.on(eventName, (event) => handler(event).catch(err => {
this.on(`ipc-${eventName}`, (event) => handler(event).catch(err => {
this._logger.error(`Error handling ipc event:\n${err.stack}`);
}));
}