diff --git a/README.md b/README.md index 4a87b0e9..79d383b7 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,13 @@ Or clone latest stable branch that has name format `x.y.z` Discord for development/support/play: https://discord.gg/5XuDkje +## Important notice + +This is the development branch for factorioClusterio 2.0 which is currently undergoing heavy +restructuring and refactoring. Expect plugins and existing installations to frequenltly break when +using this branch. If you don't want to be an alpha tester for 2.0 please use the stable +[1.2.x branch](https://github.com/clusterio/factorioClusterio/tree/1.2.x). + ### Ways to support me/the project: * Contribute with code/documentation. Always nice to move the project forward diff --git a/client.js b/client.js index bb82a891..af750e09 100644 --- a/client.js +++ b/client.js @@ -20,6 +20,13 @@ const stringUtils = require("lib/stringUtils.js"); const configManager = require("lib/manager/configManager.js"); const hashFile = require('lib/hash').hashFile; +console.warn(` ++==========================================================+ +I WARNING: This is the development branch for the 2.0 I +I version of clusterio. Expect things to break. I ++==========================================================+ +`); + // argument parsing const args = require('minimist')(process.argv.slice(2)); diff --git a/master.js b/master.js index 4af91d1e..dc68b2a4 100644 --- a/master.js +++ b/master.js @@ -857,6 +857,29 @@ async function getPlugins(){ return plugins; } +// Errror class for known errors occuring during startup +class StartupError extends Error { } + +/** + * Calls listen on server capturing any errors that occurs + * binding to the port. + */ +function listen(server, ...args) { + return new Promise((resolve, reject) => { + function wrapError(err) { + reject(new StartupError( + `Server listening failed: ${err.message}` + )); + } + + server.once('error', wrapError); + server.listen(...args, () => { + server.off('error', wrapError); + resolve(); + }); + }); +} + async function startServer() { // Set the process title, shows up as the title of the CMD window on windows // and as the process name in ps/top on linux. @@ -921,7 +944,7 @@ async function startServer() { // Only start listening for connections after all plugins have loaded if (httpPort) { let httpServer = require("http").Server(app); - httpServer.listen(httpPort); + await listen(httpServer, httpPort); console.log("Listening for HTTP on port %s...", httpServer.address().port); } @@ -932,15 +955,16 @@ async function startServer() { privateKey = await fs.readFile(config.sslPrivKey); } catch (err) { - console.error(`Error loading ssl certificate: ${err.message}`); - await shutdown() + throw new StartupError( + `Error loading ssl certificate: ${err.message}` + ); } let httpsServer = require("https").createServer({ key: privateKey, cert: certificate }, app) - httpsServer.listen(httpsPort); + await listen(httpsServer, httpsPort); console.log("Listening for HTTPS on port %s...", httpsServer.address().port); } } @@ -948,11 +972,29 @@ async function startServer() { module.exports = app; if (module === require.main) { + console.warn(` ++==========================================================+ +I WARNING: This is the development branch for the 2.0 I +I version of clusterio. Expect things to break. I ++==========================================================+ +` + ); startServer().catch(err => { - console.error( - "Unexpected error occured while starting master, please report\n"+ - "it to https://github.com/clusterio/factorioClusterio/issues" - ); + if (!(err instanceof StartupError)) { + console.error(` ++---------------------------------------------------------------+ +| Unexpected error occured while starting master, please report | +| it to https://github.com/clusterio/factorioClusterio/issues | ++---------------------------------------------------------------+` + ); + } else { + console.error(` ++----------------------------------+ +| Unable to to start master server | ++----------------------------------+` + ); + } + console.error(err); return shutdown(); });