Commit Graph
1146 Commits
Author SHA1 Message Date
Hornwitser ee063300ed Check result of rcon commands in subspace_storage
Validate that the commands sent don't error out by checking the returned
result is empty.
2020-04-03 20:51:28 +02:00
Hornwitser 3cc84d6400 Use basicType helper in lib/database
Simplify the checking logic in lib/database by using the basicType
helper.
2020-04-03 20:51:28 +02:00
Hornwitser 65494a0a91 Move basicType to lib/helpers
Move the basicType function from the config lib to a shared helpers lib.
2020-04-03 20:51:28 +02:00
Hornwitser f05100c94d Remove unused files
Remove left over files that are no longer in use.
2020-04-03 20:51:28 +02:00
Hornwitser 9a4a535add Expose Slave to instance plugins
Allow the slave object to be accessed by instance plugins through the
this.slave property.
2020-04-03 20:51:28 +02:00
Hornwitser 3ff5e630ca Warn on unhandled Factorio ipc
Send warning to console if an ipc message is received but there were no
handlers registered to handle it.
2020-04-03 20:51:28 +02:00
Hornwitser c2df80a17f Move test/json to test/file/json
Move the json test files for the lib/database tests to test/file/json to
be consistent with the location of test files for other tests.
2020-04-03 20:51:28 +02:00
Hornwitser f9f0e5b5f7 Move test/temp to temp/test
Move the temporary files generated by the the tests to the top level
directory temp.
2020-04-03 20:51:28 +02:00
Hornwitser 028f00e58a Rename client.js to slave.js
Rename the client.js script to slave.js, and changed places where it's
refered to as client into slave.
2020-04-03 20:51:28 +02:00
Hornwitser ae86781b0d Add support for multiple Factorio installs
Allow the factorio_directory specified in the slave config to contain
multiple Factorio installs and add factior.version instance option to
select which install to use for the given instance.
2020-04-03 20:51:28 +02:00
Hornwitser 4c26fcee3a Fix connection shutdown logic
Fix the WebSocket link not being properly teared down on the master
side causing the handshake to deadlock when the slave tried to connect
again.
2020-04-03 20:44:20 +02:00
Hornwitser d4e072f376 Rewrite reconnection logic
Implement proper session tracking and resume on reconnect for the
WebSocket server.
2020-04-02 21:58:44 +02:00
Hornwitser 026b7f1306 Fix missing onExit calls
Add missing calls to instance plugin onExit hooks.
2020-04-02 19:56:39 +02:00
Hornwitser 8de3f54bc4 Move slowTest into test/integration/index
Deduplicate slowTest into the shared integration test library.
2020-04-02 15:24:32 +02:00
Hornwitser 43ce6aa58c Pass validation errors with InvalidMessage error
Pass the array describing the validation errors occuring with the
InvalidMessage error throw and print it to the console.
2020-04-02 14:39:18 +02:00
Hornwitser 0a9fff7578 Merge pull request #280 from Hornwitser/brand-as-alpha
Brand library mod as alpha
2020-03-23 21:22:41 +01:00
Hornwitser b73f2f6006 Brand library mod as alpha
Add alpha notice to the title and description for the Clusterio Library
Factorio mod.
2020-03-23 21:11:34 +01:00
Hornwitser 277b78bf6d Merge pull request #279 from Hornwitser/ditch-socket-io
Ditch socket.io
2020-03-23 02:49:31 +01:00
Hornwitser 1aef3c9609 Do not use shell for spawned integration nodes
When using the shell for spawning the master and slave integration
processes the shell becomes the process that is returned by the spawn
command.  This in turn means that the SIGINT that was supposed to be
sent to the master and slave processes got ignored by the shell instead.

Fix by spawning the node process directly instead of through a shell.
2020-03-23 02:38:40 +01:00
Hornwitser 9f74d7b2ec Fix shutdown logic for slave
Shutdown running instances and close the connection to the master server
on slave stop.  Remove call to process.exit on shutdown as it's no
longer needed.
2020-03-22 03:30:57 +01:00
Hornwitser 7aa340675b Gracefully shut down integration master and slave
Use SIGINT instead of the default SIGTERM when signalling to shut down
the integration master and slave subprocesses.  This should let nyc
properly write the coverage report before it exits.
2020-03-22 02:39:20 +01:00
Hornwitser 27ef00705b Set content type for /api/inventory
Set the correct content type to JSON to for the /api/inventory endpoints.
2020-03-22 02:10:54 +01:00
Hornwitser 38c60c221f Use sub-processes in integration testing
Spawn master, slave, and clusterctl in separate processes in the
clusterio integration tests and leave the test master and slave process
available for the whole test duration to allow plugins to use them as
well.  This removes the need for reimplementing the startup logic in the
test code and makes the existing startup code covered by tests.
2020-03-22 02:10:54 +01:00
Hornwitser 677512512e Replace socket.io with plain WebSocket
Replace socket.io with plain WebSocket using the ws library as it
doesn't really provide any useful tools over plain WebSocket when it
comes to implementing reliable communication that works across
reconnects.  The widespread browser support for WebSocket also means
it has little value to add for the web interface over WebSocket.
2020-03-22 02:10:54 +01:00
Hornwitser 808bd6b453 Validate messages sent
Validate messages sent over links with the json schema provided from
them.  This aids debugging as an exception will be thrown from the code
sending the bad content.
2020-03-22 02:10:54 +01:00
Hornwitser 941ceab935 Merge pull request #278 from Hornwitser/plugin-rewrite
Plugin rewrite and code improvements
2020-03-21 19:38:46 +01:00
Hornwitser 9dac57b36b Port Research Sync plugin
Rewriwe the researchSync plugin into plugins/research_sync.
2020-03-17 01:31:51 +01:00
Hornwitser 23be732a5c Merge pull request #277 from Hornwitser/config-rewrite
Initial config system rewrite
2020-03-17 00:52:49 +01:00
Hornwitser 737c9924b9 Port and rename clusterioMod plugin
Port the clusterioMod plugin to the new plugin system under the new
subspace_storage name.
2020-03-13 22:46:17 +01:00
Hornwitser d9fe408c42 Fix master web interface
Fix the breaking changes to the plugin struture and remove slave
information that is no longer present.
2020-03-13 22:46:17 +01:00
Hornwitser 090fbd6dff Expose master interfaces to plugin
Expose Express.js app, master config, instance and slave database, slave
connections and metrics to the master plugins.
2020-03-13 22:46:17 +01:00
Hornwitser cb1d744060 Handle errors during master plugin initialization
Catch errors thrown when constructing or initializing master pluigns and
wrap them in PluginError to ensure that they are properly reported as
plugin errors.
2020-03-13 22:46:17 +01:00
Hornwitser ddd2027739 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.
2020-03-13 22:46:17 +01:00
Hornwitser 6a8346186f Implemented forwarding of requests to the master
Implement the forwardTo function for requests to the master server.
2020-03-13 22:46:17 +01:00
Hornwitser 5681ef9733 Fix plugin enabled config being inverted
Fix plugins being loaded when enable was set to false, and not loaded
when set to true.
2020-03-13 22:46:17 +01:00
Hornwitser 6f22942cc5 Fix incorrect instance lookups in plugins
Fix mistaken lookups missing the instance part, or trying to get the id
from the removed instance.id property.
2020-03-13 22:46:17 +01:00
Hornwitser 1e6b807ae3 Add Clusterio Library mod
Add a library mod for wrapping the Clusterio remote API and providing
related utilities.  This eases development of Clusterio related Lua code
by providing the same interface for both mods and modules and also makes
the serialize library available without having to duplicate it.

It is not possible to implement this through save patching as mods
cannot load Lua code from the level code like they can with code from
other mods.
2020-03-12 15:39:25 +01:00
Hornwitser 5ef6d02054 Add serialize library to clusterio module
Add library for serializing items and inventories to the clusterio
module.  This will provide a common codebase for plugins like
playerManager and trainTeleports to use in order to serialize
inventories to the master server.
2020-03-10 10:57:24 +01:00
Hornwitser eac17b4340 Remove reference to pm2
Remove the instructions for installing and using pm2 with clusterio, as
I don't know how to use this tool properly and can't keep the README up
to date on it.
2020-03-09 20:53:01 +01:00
Hornwitser 54224755e9 Add missing chalk dependency
Add chalk as a dependency as it's used in clusterctl.js.
2020-03-09 20:50:58 +01:00
Hornwitser 557d380112 Fix broken link to modules/clusterio/api.lua
Fix broken link to in docs/developing-for-clusterio.md to
modules/clusterio/api.lua.
2020-03-09 20:48:21 +01:00
Hornwitser 5e5149dc93 Implement new configuration system
Replace current configuration mess with a trimmed down version of the
original vision of #200.  Configs are collection of config groups that
have fields that can be set.  These groups allow organizing the fields
as well as opertunity for plugins to add their own groups.  By default
plugins have an auto generated group with the enabled field.
2020-03-09 20:48:13 +01:00
Hornwitser 370ee9ed04 Unminify formatBytes
There's no reason to minify formatBytes it saves nothing.  Use the
unminified version as published.
2020-01-14 08:09:39 +01:00
Hornwitser f4a0b88ff6 Remove remoteCommands plugin config
Remove the remoteCommand specific config allowRemoteCommandExecution.
The plugin has been removed and with the move to master managing the
instances/slaves it makes no sense to deny remote commands.
2020-01-14 08:09:39 +01:00
Hornwitser e137547664 Remove obsolete msBetweenCommands config
Remove the no longer used msBetweenCommands config.  The RCON connection
was changed to be limited to 5 concurrent commands instead.
2020-01-14 08:09:39 +01:00
Hornwitser d5c43cc3d6 Remove clusterioMod specific configs
Remove configuration options in the master config that's specific to the
clusterioMod plugin.
2020-01-14 08:09:39 +01:00
Hornwitser 459c039f17 Merge pull request #276 from Hornwitser/module-rework
Module rework
2020-01-07 16:16:25 +01:00
Hornwitser 892c803496 Add on_server_startup event
Add startup event to the Clusterio module API which is raised at startup
of a Factorio server.  This is to server as a replacement for the
on_init and on_configuration_changed events which cannot be used in
modules.

Adds clusterio_patch_number global from the patcher in order to
implement this.  This is a number that's incremented every time the save
is patched.
2020-01-05 23:19:34 +01:00
Hornwitser b8fb73f863 Add Factorio to Clusterio communication API
Add send_json to the Clusterio module's API which allows sending
arbitrary tables serialized as JSON to plugins that listen on the
channel specified.
2020-01-04 17:34:16 +01:00
Hornwitser 6cf16cc09e Reference by global in statistics_exporter
Store export function in a global table in the lua module for statistics
exporter in order to avoid a remote.call.
2020-01-04 17:34:16 +01:00