diff --git a/ReactQt/application/src/CMakeLists.txt b/ReactQt/application/src/CMakeLists.txt index 14db63f14..cbc79a01e 100644 --- a/ReactQt/application/src/CMakeLists.txt +++ b/ReactQt/application/src/CMakeLists.txt @@ -11,6 +11,7 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11") set(FONTS_RESOURCE "") +set(IMAGES_RESOURCE "") find_package(Qt5Core REQUIRED) find_package(Qt5Qml REQUIRED) @@ -31,6 +32,15 @@ foreach(FONT_PATH ${DESKTOP_FONTS}) endforeach(FONT_PATH) +# Add all external desktop images to resources. Images will be outside of directory with qrc, +# so we are using aliases to load them +foreach(IMAGE_PATH ${DESKTOP_IMAGES}) + get_filename_component(IMAGE_FILENAME ${IMAGE_PATH} NAME_WE) + STRING(CONCAT TMP ${IMAGES_RESOURCE} "${IMAGE_PATH}") + SET(IMAGES_RESOURCE ${TMP}) +endforeach(IMAGE_PATH) + + # Format EXTERNAL_MODULES to contain array of external modules type names defined as strings string (REPLACE ";" "," EXTERNAL_MODULES "${REACT_NATIVE_DESKTOP_EXTERNAL_MODULES_TYPE_NAMES}") diff --git a/ReactQt/application/src/main.cpp b/ReactQt/application/src/main.cpp index c88b38b60..37c84d5eb 100644 --- a/ReactQt/application/src/main.cpp +++ b/ReactQt/application/src/main.cpp @@ -127,7 +127,7 @@ class ReactNativeProperties : public QObject { QString m_packagerTemplate = "http://%1:%2/index.desktop.bundle?platform=desktop&dev=true"; QUrl m_codeLocation; QString m_pluginsPath; - QString m_executor = "LocalServerConnection"; + QString m_executor = "RemoteServerConnection"; QVariantMap m_initialProps; }; diff --git a/ReactQt/application/src/main.qrc.in b/ReactQt/application/src/main.qrc.in index 6b93c4422..0338a3708 100644 --- a/ReactQt/application/src/main.qrc.in +++ b/ReactQt/application/src/main.qrc.in @@ -13,6 +13,7 @@ main.qml ${JS_BUNDLE_RESOURCE} ${FONTS_RESOURCE} + ${IMAGES_RESOURCE} ${ICON_PNG_RESOURCE} diff --git a/ReactQt/runtime/src/componentmanagers/imagemanager.cpp b/ReactQt/runtime/src/componentmanagers/imagemanager.cpp index 08eebc35c..eb8728b4e 100644 --- a/ReactQt/runtime/src/componentmanagers/imagemanager.cpp +++ b/ReactQt/runtime/src/componentmanagers/imagemanager.cpp @@ -43,6 +43,7 @@ class ImageManagerPrivate { public: bool isBase64ImageUrl(const QUrl& url) const; void setSource(QObject* image, const QUrl& url); + bool isStoredInResources(const QString& fileName); }; ImageManager::ImageManager(QObject* parent) : ViewManager(parent), d_ptr(new ImageManagerPrivate) {} @@ -70,26 +71,28 @@ void ImageManager::manageSource(const QVariantMap& imageSource, QQuickItem* imag auto imageLoader = bridge()->imageLoader(); - QUrl source = imageSource[URI_KEY].toUrl(); + QUrl imageSourceUrl = imageSource[URI_KEY].toUrl(); + QString imageSourceStr = imageSource[URI_KEY].toString(); - if (d->isBase64ImageUrl(source)) { - d->setSource(image, source); + if (d->isBase64ImageUrl(imageSourceUrl)) { + d->setSource(image, imageSourceUrl); return; } - image->setProperty("isSVG", source.toString(QUrl::RemoveQuery).endsWith("svg")); + image->setProperty("isSVG", imageSourceUrl.toString(QUrl::RemoveQuery).endsWith("svg")); - if (source.scheme() == "file" && imageSource[URI_KEY].toString().startsWith(FILE_SCHEME)) { - source = QUrl(imageSource[URI_KEY].toString().replace(FILE_SCHEME, "")); + if (imageSourceUrl.scheme() == "file" && imageSource[URI_KEY].toString().startsWith(FILE_SCHEME)) { + imageSourceUrl = QUrl(imageSourceStr.replace(FILE_SCHEME, "")); } - - if (source.isRelative()) { - source = QUrl::fromLocalFile(QFileInfo(source.toString()).absoluteFilePath()); + if (d->isStoredInResources(imageSourceStr)) { + imageSourceUrl = QUrl(QString("qrc:/") + imageSourceStr); + } else if (imageSourceUrl.isRelative()) { + imageSourceUrl = QUrl::fromLocalFile(QFileInfo(imageSourceUrl.toString()).absoluteFilePath()); } - imageLoader->loadImage(source, [=](ImageLoader::Event event, const QVariantMap& data) { + imageLoader->loadImage(imageSourceUrl, [=](ImageLoader::Event event, const QVariantMap& data) { if (event == ImageLoader::Event_LoadSuccess) { - d->setSource(image, source); + d->setSource(image, imageSourceUrl); } bool eventHandlerSet = image->property(QString(QML_PROPERTY_PREFIX + eventNames[event]).toStdString().c_str()).toBool(); @@ -117,4 +120,10 @@ void ImageManagerPrivate::setSource(QObject* image, const QUrl& url) { image->setProperty("managedSource", url); } +bool ImageManagerPrivate::isStoredInResources(const QString& fileName) { + + QFile file(QString(":/") + fileName); + return file.exists(); +} + #include "imagemanager.moc" diff --git a/local-cli/desktop/build.js b/local-cli/desktop/build.js index 859c5faa8..d374c0641 100644 --- a/local-cli/desktop/build.js +++ b/local-cli/desktop/build.js @@ -26,6 +26,8 @@ function build(args, dependencies) { console.log("Found desktop JS bundle path: " + desktopJSBundlePath); var desktopFonts = _findDesktopFonts(args); console.log("Found desktop fonts: " + desktopFonts); + var desktopImages = _findDesktopImages(args); + console.log("Found desktop images: " + desktopImages); return _findModules(args).then((dependencies) => { return new Promise((resolve, reject) => { @@ -40,7 +42,7 @@ function build(args, dependencies) { } }); }).then(() => { - return _buildApplication(args, desktopExternalModules, desktopJSBundlePath, desktopFonts); + return _buildApplication(args, desktopExternalModules, desktopJSBundlePath, desktopFonts, desktopImages); }); } @@ -59,6 +61,11 @@ function _findDesktopFonts(args) { return JSON.parse(data).desktopFonts; } +function _findDesktopImages(args) { + var data = fs.readFileSync(path.join(args.root, 'package.json')); + return JSON.parse(data).desktopImages; +} + function _findModules(args) { return new Promise((resolve, reject) => { fs.readFile(path.join(args.root, 'package.json'), (err, data) => { @@ -121,7 +128,7 @@ function _buildModules(args, dependencies, resolve, reject) { }); } -function _buildApplication(args, desktopExternalModules, desktopJSBundlePath, desktopFonts) { +function _buildApplication(args, desktopExternalModules, desktopJSBundlePath, desktopFonts, desktopImages) { return new Promise((resolve, reject) => { console.log(chalk.bold('Building the app...')); @@ -140,6 +147,10 @@ function _buildApplication(args, desktopExternalModules, desktopJSBundlePath, de buildArguments.push("-f"); buildArguments.push(desktopFonts.toString().replace(/,/g, ';')); } + if (typeof desktopImages !== 'undefined' && desktopImages !== null) { + buildArguments.push("-i"); + buildArguments.push(desktopImages.toString().replace(/,/g, ';')); + } if (process.platform === "win32") { buildArguments.push("-g"); buildArguments.push("MinGW Makefiles"); diff --git a/local-cli/generator-desktop/templates/build.bat b/local-cli/generator-desktop/templates/build.bat index b05364306..9158b84b0 100644 --- a/local-cli/generator-desktop/templates/build.bat +++ b/local-cli/generator-desktop/templates/build.bat @@ -25,6 +25,7 @@ SET option echo "build.bat external modules paths: "%option-e% echo "build.bat JS bundle path: "%option-j% echo "build.bat desktop fonts: "%option-f% +echo "build.bat desktop images: "%option-i% echo "build.bat cmake generator: "%option-g% @rem Workaround @@ -32,4 +33,4 @@ echo "build.bat cmake generator: "%option-g% @rem Build project echo %CD% -cmake -DCMAKE_BUILD_TYPE=Debug -G %option-g% -DEXTERNAL_MODULES_DIR=%option-e% -DJS_BUNDLE_PATH=%option-j% -DDESKTOP_FONTS=%option-f% . && cmake --build . +cmake -DCMAKE_BUILD_TYPE=Debug -G %option-g% -DEXTERNAL_MODULES_DIR=%option-e% -DJS_BUNDLE_PATH=%option-j% -DDESKTOP_FONTS=%option-f% -DDESKTOP_IMAGES=%option-i% . && cmake --build . diff --git a/local-cli/generator-desktop/templates/build.sh b/local-cli/generator-desktop/templates/build.sh index 89fcde567..3d508d766 100755 --- a/local-cli/generator-desktop/templates/build.sh +++ b/local-cli/generator-desktop/templates/build.sh @@ -23,15 +23,20 @@ if [[ $1 == "-f" ]]; then shift desktopFonts="$1" fi +if [[ $1 == "-i" ]]; then + shift + desktopImages="$1" +fi shift done echo "build.sh external modules paths: "$ExternalModulesPaths echo "build.sh JS bundle path: "$JsBundlePath echo "build.sh desktop fonts: "$desktopFonts +echo "build.sh desktop images: "$desktopImages # Workaround rm -rf CMakeFiles CMakeCache.txt cmake_install.cmake Makefile # Build project -cmake -DCMAKE_BUILD_TYPE=Debug -DEXTERNAL_MODULES_DIR="$ExternalModulesPaths" -DJS_BUNDLE_PATH="$JsBundlePath" -DDESKTOP_FONTS="$desktopFonts" . && make +cmake -DCMAKE_BUILD_TYPE=Debug -DEXTERNAL_MODULES_DIR="$ExternalModulesPaths" -DJS_BUNDLE_PATH="$JsBundlePath" -DDESKTOP_FONTS="$desktopFonts" -DDESKTOP_IMAGES="$desktopImages" . && make diff --git a/local-cli/templates/HelloWorld/desktop/build.bat b/local-cli/templates/HelloWorld/desktop/build.bat index b05364306..9158b84b0 100644 --- a/local-cli/templates/HelloWorld/desktop/build.bat +++ b/local-cli/templates/HelloWorld/desktop/build.bat @@ -25,6 +25,7 @@ SET option echo "build.bat external modules paths: "%option-e% echo "build.bat JS bundle path: "%option-j% echo "build.bat desktop fonts: "%option-f% +echo "build.bat desktop images: "%option-i% echo "build.bat cmake generator: "%option-g% @rem Workaround @@ -32,4 +33,4 @@ echo "build.bat cmake generator: "%option-g% @rem Build project echo %CD% -cmake -DCMAKE_BUILD_TYPE=Debug -G %option-g% -DEXTERNAL_MODULES_DIR=%option-e% -DJS_BUNDLE_PATH=%option-j% -DDESKTOP_FONTS=%option-f% . && cmake --build . +cmake -DCMAKE_BUILD_TYPE=Debug -G %option-g% -DEXTERNAL_MODULES_DIR=%option-e% -DJS_BUNDLE_PATH=%option-j% -DDESKTOP_FONTS=%option-f% -DDESKTOP_IMAGES=%option-i% . && cmake --build . diff --git a/local-cli/templates/HelloWorld/desktop/build.sh b/local-cli/templates/HelloWorld/desktop/build.sh index 89fcde567..3d508d766 100755 --- a/local-cli/templates/HelloWorld/desktop/build.sh +++ b/local-cli/templates/HelloWorld/desktop/build.sh @@ -23,15 +23,20 @@ if [[ $1 == "-f" ]]; then shift desktopFonts="$1" fi +if [[ $1 == "-i" ]]; then + shift + desktopImages="$1" +fi shift done echo "build.sh external modules paths: "$ExternalModulesPaths echo "build.sh JS bundle path: "$JsBundlePath echo "build.sh desktop fonts: "$desktopFonts +echo "build.sh desktop images: "$desktopImages # Workaround rm -rf CMakeFiles CMakeCache.txt cmake_install.cmake Makefile # Build project -cmake -DCMAKE_BUILD_TYPE=Debug -DEXTERNAL_MODULES_DIR="$ExternalModulesPaths" -DJS_BUNDLE_PATH="$JsBundlePath" -DDESKTOP_FONTS="$desktopFonts" . && make +cmake -DCMAKE_BUILD_TYPE=Debug -DEXTERNAL_MODULES_DIR="$ExternalModulesPaths" -DJS_BUNDLE_PATH="$JsBundlePath" -DDESKTOP_FONTS="$desktopFonts" -DDESKTOP_IMAGES="$desktopImages" . && make diff --git a/package-lock.json b/package-lock.json index 969368bd0..e3beb081c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4259,469 +4259,6 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", - "optional": true, - "requires": { - "nan": "2.11.1" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.5.1", - "bundled": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.21", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": "^2.1.0" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "optional": true - }, - "minipass": { - "version": "2.2.4", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.1.0", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "needle": { - "version": "2.2.0", - "bundled": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "npm-packlist": { - "version": "1.1.10", - "bundled": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.7", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "optional": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "optional": true - }, - "semver": { - "version": "5.5.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "4.4.1", - "bundled": true, - "optional": true, - "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "optional": true, - "requires": { - "string-width": "^1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "yallist": { - "version": "3.0.2", - "bundled": true, - "optional": true - } - } - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -6176,7 +5713,6 @@ "capture-exit": "1.2.0", "exec-sh": "0.2.2", "fb-watchman": "2.0.0", - "fsevents": "1.2.4", "micromatch": "3.1.10", "minimist": "1.2.0", "walker": "1.0.7", @@ -7154,7 +6690,6 @@ "capture-exit": "1.2.0", "exec-sh": "0.2.2", "fb-watchman": "2.0.0", - "fsevents": "1.2.4", "micromatch": "3.1.10", "minimist": "1.2.0", "walker": "1.0.7", @@ -7576,7 +7111,6 @@ "capture-exit": "1.2.0", "exec-sh": "0.2.2", "fb-watchman": "2.0.0", - "fsevents": "1.2.4", "micromatch": "3.1.10", "minimist": "1.2.0", "walker": "1.0.7", @@ -8937,6 +8471,7 @@ "version": "2.11.1", "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", + "dev": true, "optional": true }, "nanomatch": { @@ -10293,7 +9828,6 @@ "exec-sh": "0.2.2", "execa": "1.0.0", "fb-watchman": "2.0.0", - "fsevents": "1.2.4", "micromatch": "3.1.10", "minimist": "1.2.0", "walker": "1.0.7", diff --git a/ubuntu-server.js b/ubuntu-server.js index 89a0349d6..057236593 100755 --- a/ubuntu-server.js +++ b/ubuntu-server.js @@ -141,5 +141,5 @@ if (process.argv.indexOf('--pipe') != -1) { DEBUG && console.error("-- Connection from RN client"); if(!closeDangerousConnection(sock)) rnUbuntuServer(sock, sock); - }).listen(port, function() { console.error("-- Server starting") }); + }).listen(port, function() { console.error("-- Server starting on port", port) }); }