Commit Graph
397 Commits
Author SHA1 Message Date
Hornwitser a1856e6edf Merge pull request #573 from CCpersonguy/feature/instance-version-2
Display Instance's Factorio version in the web UI
2024-09-03 21:57:42 +02:00
Cooldude2606 8054bd66d2 Fix instance subscriptions (#655)
Remove some assumptions that prevent subscription listeners from working on an
instance.  This means allowing the host to forward the event from the instance
to the controller; correctly storing subscription listeners by address rather
than by connection; and a bunch of network and event stuff to correctly clean up
a listener.

Remove the assumption that all subscriptions events contains the updates
property.  This meant fixing inconsistent types; always checking if the property
existed; fixing lots of the tests that made incorrect assumptions.

Minior fixes:
- Fix double firing of listener callbacks on first connection.
- Fix synced being set to true too early on first connection.
- Fix edge case interaction between last response and last snapshot for values
  with updated set as 0.

Also change the the output made during the start of tests to indicate something
is happening when start up is slow and allow for silent testing to reduce the
amount of text output to the console.
2024-09-03 12:31:32 +02:00
Arvids Godjuks 0c63852a2c Merge branch 'master' into feature/instance-version-2 2024-09-03 02:09:28 +03:00
Hornwitser 47896247fe Add option to set path to server executable (#657)
Allow overriding the logic selecting the path to the Factorio
executable.  This is mainly useful when working with development
versions of the game.
2024-09-03 01:04:50 +02:00
Cooldude2606 660af756e6 Minor Corrections 2024-08-16 07:00:08 +02:00
Cooldude2606 08c522429b Implemented configDir for outDir 2024-08-16 07:00:08 +02:00
Cooldude2606 dbc79779ea Fix sending log messages across invalid link (#639) 2024-06-08 13:52:29 +01:00
Cooldude2606 d1fa5e67d4 Improve error throwing for sending events 2024-05-18 18:42:53 +01:00
CCpersonguy 8a57d9b5f6 display Factorio version in Instances web UI 2024-05-15 09:50:39 +01:00
Hornwitser e341adfb29 Remove redundant if condition
Noticed-By: @Cooldude2606
2024-04-28 20:39:27 +02:00
Hornwitser 464d588b5e v2.0.0-alpha.18 2024-04-28 19:14:27 +02:00
Hornwitser 3cf9f96233 Coerce mod settings types during data export
Use the settings prototypes to coerce any incorrectly typed mod settings
to the correct type either by casting or by replacing the value with the
default value from the prototype.

This will fix cases where an update to a mod changes the type of ono of
its defined settings.
2024-04-28 16:52:33 +02:00
Hornwitser 7625fd82e3 Cache ModInfo to reduce startup time (#606)
Store and use a cache of the loaded ModInfo data to mod-info-cache.json
in the mods directory during startup.  For simplicity this does not
cache mods added to the controller or host after startup, these get
added to the cache on the next startup.
2024-03-06 17:30:45 +00:00
Daniel a68bb9c0a8 Increase libLink event emitter leak warning limit (#600) 2024-02-25 23:50:14 +01:00
Cooldude2606 1afee2ede5 Merge branch 'master' into feature/http-logging 2024-02-14 22:46:19 +00:00
Hornwitser 5f85c0575e v2.0.0-alpha.17 2024-02-12 17:54:48 +01:00
Cooldude2606 e5a4d51c86 Merge pull request #590 from Hornwitser/bugfixes-3
Bugfixes 3
2024-02-11 23:01:43 +00:00
Hornwitser 97e615fc21 Merge pull request #584 from Hornwitser/build-rework
Build rework
2024-02-11 22:14:35 +01:00
Danielv123 4aca5050b9 Allow sending instance management messages from controller plugins 2024-02-09 07:00:05 +03:00
Hornwitser 1021e29c98 Support shorthand notation for colours
Implement the shorthand notations that Factorio recognises for colours
where individual components may be left out or the colour specified as
an array of values instead of an object.
2024-02-08 18:42:38 +01:00
Hornwitser 597d080d71 Add tsconfig.json that references both builds
Add back unqualified tsconfig.json files to each package that references
both the Node.js build and the browser build.  This makes tsc --build
compile both builds when the variant to do is not specified.
2024-02-08 03:20:26 +01:00
Hornwitser e4f90b3480 Move tsconfig.json to tsconfig.node.json
Distinguish the Node.js build in the same way the browser build is with
the .node suffix to the tsconfig files it uses.  This means
tsconfig.node outputs to dist/node and tsconfig.browser outputs to
dist/browser.
2024-02-08 03:20:26 +01:00
Hornwitser 8c4d2db192 Move TypeScript Node.js build to dist/node
Use a separate folder for the TypeScript build for Node.js in the dist
folder.  This makes each type of build consistently have its own output
folder instead of being interleaved with the Node.js build.
2024-02-08 03:20:26 +01:00
Hornwitser 152eb7d454 Move TypeScript browser build to dist/browser
Use dist/browser as the output of the browser oriented TypeScript build
of packages instead of dist/web/build.  This distinguishes it better
from the Web UI bundle which is put together with webpack.
2024-02-07 18:35:05 +01:00
Hornwitser 8e5d581b9b Move tsconfig.web.json to tsconfig.browser.json
Rename the config files for the browser build of modules to better
communicate that it's purpose is to compile code for a browser
environment rather than the Web UI in particular.  This also aligns with
the "browser" option in package.json, the existing browser.ts entrypoint
in lib, and how the browser environment is typically referred to.
2024-02-07 17:42:39 +01:00
Hornwitser 535e43b527 Rename save.list.subscribe permission
Follow the same pattern as all the other subscribable lists by having a
separate .list and .subscribe permissions for saves.  This also fixes
the save list not being visible due to a typo in the permission in the
Web UI.
2024-02-06 22:43:04 +01:00
Hornwitser 2e25831b4d Warn on subscription updates with same timestamp
If the value in a subscribed list is updated while the updatedAtMs
timestamp is kept the same then the caching logic of the subscription
system will cause updates to be silently dropped.  Log a warning if a
subscriber catches this happening to help tracking down such cases.
2024-02-06 22:43:04 +01:00
Hornwitser 48c31b4825 Fix unhandled rejection on disconnect (#582)
If a link is closed while the prepareDisconnect action is in progress
the link will still try to signal the disconnect ready over the socket
when the prepareDisconnect action completes, which throws due to the
socket no longer being present.  This error is not caught due to the
catch happening before the finally on the promise and triggers an
unhandled rejection.

Fix by rearranging the finally to come before the catch on the promise
so that errors are always handled, and checking that the link still has
a session before attempting to send the disconnect ready signal.
2024-02-05 23:36:43 +01:00
Hornwitser c2b6a6e1c0 v2.0.0-alpha.16 2024-01-26 13:04:07 +01:00
Hornwitser f5255d6f76 Fix message seq reuse on forwarding (#579)
When messages were forwarded they were sent using the low level
connector .send method which accepts a message and sends it over the
link.  This method sends the message as is with no modification which
means that at no point during the forwarding logic was the message
sequence number that originated from Link A renumbered to the correct
sequence number to send out on Link B which it was forwarded on.

This in turn caused the logic which drops acked messages from the send
buffer to break which in turn meant the resume could cause duplication
of message and/or messages to be lost.  With enough duplicated messages
the resume of one connection could cause other connections to drop and
also initiate resume.

Fix by renumbering the sequence on forwarded messages.  In the future
the sequences sent and received should also be checked to make sure this
kind of problem does not happen again, this is not done here because
partially updating a running cluster with sequence problems to one that
checks and enforces sequences numbers will be problematic.
2024-01-26 13:02:26 +01:00
Hornwitser 7d6eac6558 v2.0.0-alpha.15 2024-01-24 04:40:21 +01:00
Hornwitser 499e973db9 Fix InstanceConfigSetPropRequest schema
Fix the value incorrectly being set as required in the schema and thus
preventing props on config field objects of the instance from being
removed.
2024-01-24 03:43:21 +01:00
Hornwitser e3cfc090d3 Fix string format of Address
When host and instance id in Address was reordered in 1e66f11 the
toString method Address was updated to account for this.  Fix toString
showing host addresses as being instance addresses and vice versa.
2024-01-24 03:43:21 +01:00
Hornwitser 38dcff2225 Use h: as short form of host in log lines
Before the rename from hosts were called slave which is why s: made
sense. Use h: instead.
2024-01-24 03:43:21 +01:00
Hornwitser 847945cfdd Fix plugin broadcasts not being filtered
When a plugin broadcasts an event to instances there may be hosts and
instances in the cluster which does not have the plugin loaded.  This
would cause an error to be logged for every instance which does not have
the plugin loaded.

Filter out broadcast events sent to hosts and instances such that
instances and hosts that does not have the event do not received them.
2024-01-24 01:56:01 +01:00
Hornwitser 96bd5fb1c2 Handle virtual links in Link._clearPendingRequests
When a request is forwarded from a virtual link to a WebSocket link as
is the case when an instance sends a request to the controller the
origin for the request is a virtual link.  Handle this case in
_clearPendingRequests instead of throwing an assertion error.
2024-01-22 20:48:01 +01:00
Hornwitser 123148e277 Fix pending request not deleted on response
Fix memory leak due to the recorded _pendingRequests entry for a request
not being deleted when the response for the request has been received.
2024-01-22 20:48:01 +01:00
Hornwitser d7edae99c5 Add metrics for pending request
Track the number of requests currently awaiting a response from a
request handler both from interally issued requests and requests
forwarded from other parties.
2024-01-22 20:48:01 +01:00
Hornwitser 72264f0c53 Add suport for color mod setting (#568)
Implement the color-setting type in ModPack and display a color picker
for it in the Web UI. This type of setting was added in Factorio 1.1.77.
2024-01-21 23:48:26 +01:00
Hornwitser 1be1b029a0 2.0.0-alpha.14 2024-01-20 21:58:42 +01:00
Hornwitser 5ae19042f1 Fix capacity typo in metrics 2024-01-20 20:37:13 +01:00
Hornwitser c53781d16c Add time unit suffixes to variables (#561)
Add suffixes like Ms and Ns to variables whos time unit is not in
seconds.  This is aligning with a new code style of putting units
on variables that are not in SI base units.
2024-01-20 13:26:55 +01:00
Hornwitser 9842705eb9 Improve error reporting of plugins in the Web UI (#557)
Keep the error message and display it in the plugin page when loading
the plugin info or the plugin itself fails to load in the Web UI.
2024-01-20 05:20:24 +01:00
Hornwitser 1e66f11917 Reorder members of Address
The logical order of clusterio's components are in most places
controller, host, instance, control.  It is confusing that Address
breaks this convention and I do not remember I wrote it that way.
Reorder and renumber the host and instance members of Address to
be consistent with most other places.
2024-01-20 02:19:47 +01:00
Hornwitser b0f6c95fca Move export for plugin declaration (#555)
Change the expected exported name of plugin declarations to be "plugin"
at the main entrypoint instead of the default export.  This makes the
plugin's code organisation more flexible especially when using CommonJS
JavaScript modules as they can export additional symbols from the
plugin declaration file.
2024-01-18 20:31:52 +01:00
Cooldude2606 0e68596fbd Remove insecure and bloated module 2024-01-18 18:50:30 +00:00
Cooldude2606 9bcbc1e7f3 Add http logging for express 2024-01-18 18:50:29 +00:00
Hornwitser 8884116ee9 Implement stop and restart of controller/hosts (#554)
Implement remotely initiated stopping and restarting of the controller
and hosts.  Restarting is implemented by exiting with a non-zero exit
code and relying on a process manager to start the procress again.  To
prevent accidentally trying to restart on a system that doesn't have a
process manager present the --can-restart command line option needs to
be passed to enable the restart operation.
2024-01-18 16:10:42 +01:00
Hornwitser 527c98d378 Add first join at player statistic (#551)
Record the time a player was first seen joining an instance in
PlayerStats.  For existing stats this value is set to the last
joined time when it is first loaded.
2024-01-17 20:29:30 +01:00
Hornwitser 863d90c7fb Implement custom input for mod pack config (#547)
Add custom input component support to the Web UI config in order to
provide a user friendly dropdown selector for the Mod Pack that is
configured as default on the controller and overridden instances.
2024-01-17 20:29:04 +01:00