Commit Graph
996 Commits
Author SHA1 Message Date
Hornwitser ff3fc3b94b Remove .js suffix in require paths
Remove the .js suffix in require paths to make requires consistent
across the project.
2019-10-28 19:45:34 +01:00
Hornwitser 6bde8a2219 Remove .js suffix from node invocations
Remove the .js suffix from help texts of node invocations as well as
actual invocations as this is not necessary.  Removing it opens up the
possibility of restructuring the code into a directory with the same
name.
2019-10-28 19:45:32 +01:00
Hornwitser a9a382b993 Mark package as 2.0.0 development version
Change the version in package.json to 2.0.0-alpha
2019-10-28 19:44:56 +01:00
Hornwitser e287ca6ea9 Merge pull request #248 from Hornwitser/save-patch
Replace Hotpatch with a save patcher
2019-10-27 17:23:27 +01:00
Hornwitser 5d9d3981ff Remove getLua and getCommand from clusterTools
Remove the unused and badly behaved getCommand and getLua functions from
clusterTools.  The main issue with these is that encourage the use of
large commands that have negative impact on the performance of the
servers, as such large commands have to be transmitted to all players
that are connected.  These functions also have poor handling of lua
comments and will fail on strings containing for example "--".
2019-10-24 22:49:16 +02:00
Hornwitser 1595555154 Refactor statisticsExporter lua code
Rewrite lua part of statisticsExporter to to use game.table_to_json and
the save patching based module system.
2019-10-24 22:49:16 +02:00
Hornwitser 1a035e849e Replace Hotpatch with save patching
Remove Hotpatch and implement a save patcher in its place.  The save
patcher takes a normal Factorio save and adds modules to it that's
loaded by a generated control.lua file.  This greatly reduces the
difficulty of adding an existing game to Clusterio and using scenario
code in plugins.

The mechanism for selecting what code to patch into the saves from
plugins is temorary and expected to change with #220.
2019-10-24 22:49:16 +02:00
Hornwitser 079e31cf05 Implement hashStream
Add a hashStream method to lib/hash that does the same as hashFile only
with a stream instead of a file path and implement tests for both of
these methods.
2019-10-24 22:49:16 +02:00
Hornwitser e6d995d97a Merge pull request #242 from Hornwitser/finish-factorio-server
Rewrite Factorio server spawning and communication
2019-10-24 22:48:19 +02:00
Hornwitser c08d97e698 Document change to instance ports and password
Add entry to changelog detailing the change to null by default entries
for the ports and password in the instance config, and update the
comment in it to reflect the recent changes.
2019-10-24 15:14:40 +02:00
Hornwitser 4d94fb9a6c Fix blank port/password being sent to master
Fix client sending a blank port/password when these are configured as
null and generated by the FactorioServer class.
2019-10-24 15:14:34 +02:00
Hornwitser 93480c8b29 Refactor getFactorioLocale
Move getFactorioLocale to the new lib/factorio namespace and refactor it
to use async functions instead of callbacks.  Split tests into
integration with factorio and testing of the function itself.

Also removes the cacheing from the function itself as this breaks the
isolated testing of it.
2019-10-14 18:56:46 +02:00
Hornwitser a01b971ba2 Rewrite Factorio server spawning
Break out the server process management to a new FactorioServer class in
lib/factorio.  This class takes responsibility for managing a factorio
server, communicating with it and handling the stopping of it.  It also
replaces the previous effort to do this in lib/factorioServer.

This change also updates the version of rcon-client, and since the
author of it has updated it to use UTF-8 the fork is no longer
necessary.  It also removes the messageInterface implementation
in favor of just calling the rcon-client library directly since
this has rate limiting logic built in.

The lib/factorio library is intended to abstract all the interfacing
that happens with Factorio.
2019-10-14 18:56:46 +02:00
Hornwitser 6b4ab6660c Generate instance ID separate from rcon password
Create a random instance ID using Math.random instead of deriving it
from the RCON password with a hombrew hash algorithm.  Remove
stringUtils as it's no longer needed.
2019-10-14 15:51:45 +02:00
Hornwitser 33e9f9d983 Link lib/scenarios instead of copying it
Link the instance directory's scenario folder to lib/scenarios instead
of copying it.  This ensures it stays up to date.
2019-10-14 15:51:45 +02:00
Hornwitser cbcf868c9e Refactor fileOps.getNewestFile
Simplify getNewestFile by converting it to an async function, use the
fs-extra promise based fs functions and remove the files argument as
well as the callback.

Refactors the tests as well to use the test/temp folder.
2019-10-14 15:51:45 +02:00
Hornwitser 6a870be233 Implement symlinking of shared mods
Add symlinkMods function which takes an instance and a shared mods
folder as input and updates or creates the instance mods folder from it
by symlinking the mods in the shared mods folder to the instance mods
folder.

On Windows this uses hard links as the symlinks require elevated
privileges.
2019-10-14 15:51:45 +02:00
Hornwitser 2ff52a1cf2 Move clusterioMod file creation
Move the creation of the output.txt, orders.txt and txbuffer.txt script
output files out of the client.js code and into the clusterioMod.
2019-10-14 15:51:45 +02:00
Hornwitser 3202e2d150 Merge pull request #246 from Hornwitser/port-1.2.2-fixes
Port 1.2.2 fixes
2019-10-13 17:57:26 +02:00
Hornwitser debb33eb3f Change instructions to install master branch
Change back the instructions in README.md to install the master branch
of clusterio and add warnings for this in the relevant locations
directing users to the stable branch for instructions on how to install
the stable version.
2019-10-13 15:36:06 +02:00
Hornwitser 34fc6f0820 Port exit if masterAuthToken is missing
Exit client.js with a non-zero exit code if it's detected that the
masterAuthToken is missing in the config.

This is a port of 8b4ec58.
2019-10-13 14:45:27 +02:00
Hornwitser e8d9d160c4 Port recommend running without pm2 first
Recommend running master server without pm2 first as this makes
discovering any potential errors much simpler.

This is a port of 6e26d32.
2019-10-13 14:45:27 +02:00
Hornwitser 999fb79570 Fix changelog entries for 1.2.2
Move node v10 requirement to 1.2.2 and add changelog entry for updating
bcrypt (which has already been done for the master branch.)
2019-10-13 14:19:35 +02:00
Hornwitser 77571d3c71 Port swap curl with wget in install instructions
Swap out curl with wget in the install instructions as wget is
pre-installed on Ubuntu.

This is a port of 72b56a0 and dbef2bd.
2019-10-13 14:19:15 +02:00
Hornwitser de20635aea Port reorder install instructions
Reorder the install pm2 step to be after the npm install step in the
instructions.  This is necessary to avoid npm creating some files in the
home directory owned as root and then failing the npm install step
because of this.

This is a port of c25bf23.
2019-10-12 22:53:44 +02:00
Hornwitser 5d24329456 Port fix crash in recount_cluster_research_progress
Check that the relevant research is present in the research mapping
before accessing it in recount_cluster_research_progress.

This is a port of 0cdb5d0.
2019-10-12 22:46:08 +02:00
Hornwitser 4eda983cf4 Port filter out lower levels when syncing research
Fix the next level of an infinite research getting updated with the
progress of the previous level from other nodes in the cluster by
filtering out infinite researches with a lower level than the local
level.

This is a port of 075d54f.
2019-10-12 22:45:43 +02:00
Hornwitser 7f82680511 Port set progress when completing infinite researches
Set the progress for the next level of an infinite research when
unlocking it via a script.  This is necessary when the research is
actively being researched  as Factorio will carry over the progress for
the current level into the next one when set via a script.

It's possible for the new progress to be non-zero if the next level was
on the research queue.

This is a port of 62f3a99.
2019-10-12 22:45:07 +02:00
Hornwitser 9098b3cf19 Port rename research to tech
Use tech as the loop variable for researches as this is consistent with
the rest of the researchSync module.

This is a port of 3b1ed1a
2019-10-12 22:44:13 +02:00
Hornwitser 183902ced3 Port fix incorrect property checks in researchSync
Fix naive checks for properties being set of the form obj[key] into the
proper form Object.hasOwnProperty.call(obj, key).  The reason for this
is that if the key has a value of a built-in property like 'constructor'
then a check of the form obj[key] will always return true even if that
property hasn't been set on the object.

This is a port of 6a6274e.
2019-10-12 22:43:27 +02:00
Arvids Godjuks b3eae22221 Merge pull request #241 from Hornwitser/port-1.2.1-fixes
Port version 1.2.1 fixes
2019-09-19 15:43:08 +02:00
Hornwitser 0b3e4fe6f4 Port fix license in package.json
Correct license entry being ISC instead of MIT in package.json.

This is a port of 7e2ca58.
2019-09-19 14:50:21 +02:00
Hornwitser 7d1942b615 Port spawn factorio server deteached in client.js
Sending ^C via the terminal on Linux may cause SIGINT to be sent twice
to the factorio process, causing it to exit without completing the
saving.  This happens because the shell sends the interupt to all
members of the process group for the job and this includes both the
node client process and the factorio server process.

Avoid this situation by passing detached to spawn when the platform is
Linux, which causes the process to be created with its own process group
and therefore not targeted by a SIGINT from the shell.

This unfortunately does not work on Windows as we can't send SIGINT or
^C to a process there.  Doing subprocces.kill on Windows terminates the
process similarly to how SIGKILL works on Linux.

This is a port of 6b090cd.
2019-09-19 14:50:21 +02:00
Hornwitser 9eb9291314 Port update node-factorio-api to 0.3.8
Note that the versions 0.3.6 and 0.3.7 had issues with an old
mod_cache.json being present.

This is a port of 78de723.
2019-09-19 14:50:21 +02:00
Arvids Godjuks b068550775 Merge pull request #238 from Hornwitser/move-templates
Move EJS templates
2019-09-18 18:16:00 +02:00
Hornwitser 6726c2b16f Refactor EJS string gluing code
Rewrite awful string gluing of HTML with JS to use the slightly less
awful EJS string gluing method.
2019-09-18 16:54:26 +02:00
Hornwitser 706a1dbd39 Indent static/browserconfig.xml
Make static/browserconfig.xml readable by indenting it's content.
2019-09-18 16:54:26 +02:00
Hornwitser a62e8d17a3 Move ejs templates to views/
Move the ejs templates to the default Express.js views/ folder and
change their extension to .ejs.  Reconfigure Express.js to look for
templates in the views folders as well as the plugins folder.  This
enables plugins to render templates using paths of following format
"pluginName/path/to/page-or-view".
2019-09-18 16:54:11 +02:00
Arvids Godjuks a4983d75fb Merge pull request #237 from Hornwitser/missing-coverage
Add missing files to coverage report
2019-09-18 15:35:29 +02:00
Hornwitser 1fd8ae954b Add missing files to coverage report
Add missing.js test files that requires any files that currently does
not have any unit tests defined for them.  This should hopefully make it
so that when unit tests are added for parts of these files the coverage
will increase instead of decreasing.

Note that this does not include CLI Tools/ as those are not testable.
2019-09-18 15:25:19 +02:00
Arvids Godjuks e15462439a Merge pull request #235 from Hornwitser/config-part-3
Config Rewrite Part 3
2019-09-18 14:06:50 +02:00
Arvids Godjuks 312c45bda5 Merge pull request #236 from Hornwitser/dedup-clustertools
Remove duplicated clusterTools code
2019-09-18 14:05:05 +02:00
Hornwitser aaf43143df Add compression to getInstanceName
Set the compression header when doing requests in getInstanceName.
2019-09-18 13:55:01 +02:00
Hornwitser c5cae30d83 Remove duplicated clusterTools code
Remove getCommand, getInstanceName, getSafeLua, and
checkHotpatchInstallation definitions from plugins and use the
implementation in lib/clusterTools for these functions instead.
2019-09-18 13:54:22 +02:00
Hornwitser a783bd9651 Refactor out config injection in modManager
Change config in modManager to be passed to each individual functions
instead of requiring it be present at load time.
2019-09-16 16:04:08 +02:00
Hornwitser 5f33cf4d3b Remove config management
Remove lib/manager/configManager.js and the config management command
line interface as well as the serverManager's web interface for config
management.  The configuration rewrite will work differently and is not
compatible with configManager.js.
2019-09-16 16:04:08 +02:00
Hornwitser dd865b42b5 Fix incorrect handling of instance ids
After 651b09b the instance ID would be treated differently depending on
wheteher it was a string or a number in the master server.  This caused
researchSync to break as it would send the ID as a number while the
master server would have it stored as a string.

Fix by coercing instanceID to a string in the master HTTP API.
2019-09-16 16:04:08 +02:00
Hornwitser 858449c57a Move client config loading to startClient
Move the configuration loading step in client.js into the startClient
function in order to separate it from the client code definition.
2019-09-16 16:04:08 +02:00
Hornwitser 53a5ce062b Ensure instance name is a valid Windows file name
Add check for instance name that ensures it being a valid Windows file.
See the microsoft article about naming files for more details:
https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file
2019-09-16 16:04:02 +02:00
Hornwitser 1ba9e68603 Move instance directory to Instance class
Replace the instancedirectory variable with an Instance class that holds
the directory and has a .path() to get paths relative to the instance
directory.
2019-09-15 13:43:14 +02:00