New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

quickgame-server

Package Overview
Dependencies
Maintainers
1
Versions
42
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

quickgame-server - npm Package Compare versions

Comparing version 0.1.10 to 0.1.11

.DS_Store

35

lib/app.js

@@ -1,1 +0,34 @@

"use strict";var _interopRequireWildcard=require("@babel/runtime/helpers/interopRequireWildcard"),_interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault"),_path=_interopRequireDefault(require("path")),_koa=_interopRequireDefault(require("koa")),_koaStatic=_interopRequireDefault(require("koa-static"));require("./common/regenerator");var _record=require("./middleware/record"),_qrcodeTerminal=_interopRequireDefault(require("qrcode-terminal")),utils=_interopRequireWildcard(require("./common/utils")),_bundle=_interopRequireDefault(require("./routes/bundle")),_debug=_interopRequireDefault(require("./routes/debug")),app=new _koa.default;app.use((0,_koaStatic.default)(_path.default.join(__dirname,"public"))),app.use(_record.record),app.use(_bundle.default.routes(),_bundle.default.allowedMethods()),app.use(_debug.default.routes(),_bundle.default.allowedMethods()),app.on("error",function(e,r){console.error("### App Server ### 服务器错误: ".concat(e.message));var u="出错了!HTTP error code: ".concat(e.status,", 出错信息: ").concat(e.message);r&&(r.body=u)}),module.exports=app;
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _path = _interopRequireDefault(require("path"));
var _koa = _interopRequireDefault(require("koa"));
var _koaStatic = _interopRequireDefault(require("koa-static"));
var _record = require("./middleware/record");
var _bundle = _interopRequireDefault(require("./routes/bundle"));
var _debug = _interopRequireDefault(require("./routes/debug"));
var app = new _koa["default"](); // 静态服务
app.use((0, _koaStatic["default"])(_path["default"].join(__dirname, 'public'))); // record
app.use(_record.record); // 路由
app.use(_bundle["default"].routes(), _bundle["default"].allowedMethods());
app.use(_debug["default"].routes(), _bundle["default"].allowedMethods()); // 配置静态web服务的中间件
app.on('error', function (err, ctx) {
console.error("### App Server ### \u670D\u52A1\u5668\u9519\u8BEF: ".concat(err.message));
var errMsg = "\u51FA\u9519\u4E86!HTTP error code: ".concat(err.status, ", \u51FA\u9519\u4FE1\u606F: ").concat(err.message);
if (ctx) {
ctx.body = errMsg;
}
});
module.exports = app;

@@ -1,1 +0,400 @@

"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:!0}),exports.mkdirsSync=mkdirsSync,exports.getServerIPAndPort=getServerIPAndPort,exports.getClientIPAddress=getClientIPAddress,exports.stripPrefixForIPV4MappedIPV6Address=stripPrefixForIPV4MappedIPV6Address,exports.generateQrcode=generateQrcode,exports.outputQRCodeOnTerminal=outputQRCodeOnTerminal,exports.traverseDirSync=traverseDirSync,exports.getProjectName=getProjectName,exports.getClientFromRequest=getClientFromRequest,exports.emitWSEvent=emitWSEvent,exports.getInspectorUrl=getInspectorUrl,exports.getDebugInfoFromRequest=getDebugInfoFromRequest,exports.startChrome=startChrome,exports.SOURCE=exports.getPort=exports.colorconsole=exports.LINK_MODE=void 0;var _os=_interopRequireDefault(require("os")),_net=_interopRequireDefault(require("net")),_fs=_interopRequireDefault(require("fs")),_path=_interopRequireDefault(require("path")),_chalk=_interopRequireDefault(require("chalk")),_qrcodeTerminal=_interopRequireDefault(require("qrcode-terminal")),_chromeSimpleLauncher=_interopRequireDefault(require("chrome-simple-launcher")),LINK_MODE={NULL:0,WIFI:1,ADB:2};exports.LINK_MODE=LINK_MODE;var logLevelMap={};function prependLevel(e,r){var t;!logLevelMap[e]&&((t=e.toUpperCase().substr(0,4)).paddEnd&&t.paddEnd(4),logLevelMap[e]=t),"string"==typeof r[0]&&1<r[0].length&&"["!==r[0][0]&&(r[0]="[".concat(logLevelMap[e],"] ").concat(r[0]))}var colorconsole={trace:function(){for(var e,r=arguments.length,t=new Array(r),o=0;o<r;o++)t[o]=arguments[o];prependLevel("trace",t),(e=console).trace.apply(e,t)},log:function(){for(var e=arguments.length,r=new Array(e),t=0;t<e;t++)r[t]=arguments[t];prependLevel("log",r),console.log(_chalk.default.green.apply(_chalk.default,r))},info:function(){for(var e=arguments.length,r=new Array(e),t=0;t<e;t++)r[t]=arguments[t];prependLevel("info",r),console.info(_chalk.default.green.apply(_chalk.default,r))},warn:function(){for(var e,r=arguments.length,t=new Array(r),o=0;o<r;o++)t[o]=arguments[o];prependLevel("warn",t),console.warn((e=_chalk.default.yellow).bold.apply(e,t))},error:function(){for(var e,r=arguments.length,t=new Array(r),o=0;o<r;o++)t[o]=arguments[o];prependLevel("error",t),console.error((e=_chalk.default.red).bold.apply(e,t))},throw:function(){var e;throw new Error((e=_chalk.default.red).bold.apply(e,arguments))}};function mkdirsSync(e){return!!_fs.default.existsSync(e)||(mkdirsSync(_path.default.dirname(e))?(_fs.default.mkdirSync(e),!0):void 0)}function getServerIPAndPort(e){return(getIPv4IPAddress()||"127.0.0.1")+"".concat(80===e?"":":"+e)}function getClientIPAddress(e){return stripPrefixForIPV4MappedIPV6Address(e.headers["x-forwarded-for"]||e.connection&&e.connection.remoteAddress||e.socket&&e.socket.remoteAddress||e.connection&&e.connection.socket&&e.connection.socket.remoteAddress)}function stripPrefixForIPV4MappedIPV6Address(e){return/^::1$/.test(e)&&(e="127.0.0.1"),/^::.{0,4}:(\d{1,3}\.){3}\d{1,3}/.test(e)&&(e=e.replace(/^.*:/,"")),e}function generateQrcode(e){var r=getIPv4IPAddress();if(r){var t="http://".concat(r,":").concat(e);colorconsole.info(""),colorconsole.info("### App Server ### 服务器地址:".concat(t)),colorconsole.info("### App Server ### 请确保手机与App Server处于相同网段"),colorconsole.info(""),outputQRCodeOnTerminal(t)}else colorconsole.warn("### App Server ### 本机IP地址为空,无法通过WIFI调试")}function outputQRCodeOnTerminal(e){console.info(""),console.info("生成HTTP服务器的二维码: ".concat(e)),_qrcodeTerminal.default.generate(e,{small:!0})}exports.colorconsole=colorconsole;var getPort=function n(c){return new Promise(function(r,t){var o=_net.default.createServer().listen(c);o.on("error",function(e){"EADDRINUSE"===e.code?(o.close(),r(n(c+1))):t(e)}),o.on("listening",function(){o.close(),r(c)})})};function traverseDirSync(t,o,n){_fs.default.readdirSync(t).forEach(function(e){e=_path.default.join(t,e);var r=_fs.default.statSync(e);r&&r.isDirectory()?traverseDirSync(e,o,n):("function"==typeof n&&!n(e)||"function"!=typeof n)&&o.push(e)})}function getProjectName(){try{var e=process.cwd(),r=_path.default.join(e,"manifest.json"),t=require(r);return t&&t.package||"Bundle"}catch(e){colorconsole.error("### App Server ### 获取项目名称出错:".concat(e.message))}}function getIPv4IPAddress(){var r,e=_os.default.networkInterfaces();for(var t in e){if(Object.prototype.hasOwnProperty.call(e,t))if(e[t].every(function(e){return!("IPv4"===e.family&&!e.internal&&"127.0.0.1"!==e.address)||(r=e,!1)}),void 0!==r)break}return r&&r.address}function getClientFromRequest(e){var r=getClientIPAddress(e),t=getIPv4IPAddress(),o=e.header["device-serial-number"],n=LINK_MODE.NULL;return"127.0.0.1"===r&&o?n=LINK_MODE.ADB:"127.0.0.1"!==r&&r!==t&&(n=LINK_MODE.WIFI),{clientIp:r,sn:o,linkMode:n}}function emitWSEvent(e,r,t){e.sockets.emit(r,t||{})}function getInspectorUrl(e){var r=e.ws,t=e.serverPort,o="http://".concat(getServerIPAndPort(t)),n="?ws=".concat(encodeURI(r),"&remoteFrontend=true&dockSide=undocked");return"".concat(o).concat("/inspector/inspector.html").concat(n)}function getDebugInfoFromRequest(e){var r=getClientFromRequest(e),t=r.sn,o=r.linkMode,n=e.body,c=n.ws,a=n.application,s=c.split(":")[1].split("/")[0];return{sn:t,linkMode:o,ws:c,application:a,devicePort:s}}function startChrome(e){return _chromeSimpleLauncher.default.launch(e)}exports.getPort=getPort;var SOURCE={IDE:"ide"};exports.SOURCE=SOURCE;
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.mkdirsSync = mkdirsSync;
exports.getServerIPAndPort = getServerIPAndPort;
exports.getClientIPAddress = getClientIPAddress;
exports.stripPrefixForIPV4MappedIPV6Address = stripPrefixForIPV4MappedIPV6Address;
exports.generateQrcode = generateQrcode;
exports.outputQRCodeOnTerminal = outputQRCodeOnTerminal;
exports.traverseDirSync = traverseDirSync;
exports.getProjectName = getProjectName;
exports.getClientFromRequest = getClientFromRequest;
exports.emitWSEvent = emitWSEvent;
exports.getInspectorUrl = getInspectorUrl;
exports.getDebugInfoFromRequest = getDebugInfoFromRequest;
exports.startChrome = startChrome;
exports.SOURCE = exports.getPort = exports.colorconsole = exports.LINK_MODE = void 0;
var _os = _interopRequireDefault(require("os"));
var _net = _interopRequireDefault(require("net"));
var _fs = _interopRequireDefault(require("fs"));
var _path = _interopRequireDefault(require("path"));
var _chalk = _interopRequireDefault(require("chalk"));
var _qrcodeTerminal = _interopRequireDefault(require("qrcode-terminal"));
var _chromeSimpleLauncher = _interopRequireDefault(require("chrome-simple-launcher"));
var LINK_MODE = {
NULL: 0,
WIFI: 1,
ADB: 2
};
exports.LINK_MODE = LINK_MODE;
var logLevelMap = {};
function prependLevel(levelName, args) {
!logLevelMap[levelName] && function (levelNameInner) {
var logLevel = levelNameInner.toUpperCase().substr(0, 4);
logLevel.paddEnd && logLevel.paddEnd(4);
logLevelMap[levelName] = logLevel;
}(levelName);
if (typeof args[0] === 'string' && args[0].length > 1 && args[0][0] !== '[') {
args[0] = "[".concat(logLevelMap[levelName], "] ").concat(args[0]);
}
}
/**
* 带颜色的 info, log, warn, error, trace 的输出工具函数
*/
var colorconsole = {
trace: function trace() {
var _console;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
prependLevel('trace', args);
(_console = console).trace.apply(_console, args);
},
log: function log() {
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
prependLevel('log', args);
console.log(_chalk["default"].green.apply(_chalk["default"], args));
},
info: function info() {
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
args[_key3] = arguments[_key3];
}
prependLevel('info', args);
console.info(_chalk["default"].green.apply(_chalk["default"], args));
},
warn: function warn() {
var _chalk$yellow;
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
args[_key4] = arguments[_key4];
}
prependLevel('warn', args);
console.warn((_chalk$yellow = _chalk["default"].yellow).bold.apply(_chalk$yellow, args));
},
error: function error() {
var _chalk$red;
for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
args[_key5] = arguments[_key5];
}
prependLevel('error', args);
console.error((_chalk$red = _chalk["default"].red).bold.apply(_chalk$red, args));
},
"throw": function _throw() {
var _chalk$red2;
throw new Error((_chalk$red2 = _chalk["default"].red).bold.apply(_chalk$red2, arguments));
}
};
/**
* 创建任意深度的路径的文件夹
* @param dirname
* @returns {boolean}
*/
exports.colorconsole = colorconsole;
function mkdirsSync(dirname) {
if (_fs["default"].existsSync(dirname)) {
return true;
} else {
if (mkdirsSync(_path["default"].dirname(dirname))) {
_fs["default"].mkdirSync(dirname);
return true;
}
}
}
/**
* 取得server端的IP和port
* @param port {number}
* @returns {string}
*/
function getServerIPAndPort(port) {
return (getIPv4IPAddress() || '127.0.0.1') + "".concat(port === 80 ? '' : ':' + port);
}
/**
* 获取客户端ip
* @param req node Http IncomingRequest Object
* @returns {any|*|string}
*/
function getClientIPAddress(req) {
var ip = req.headers['x-forwarded-for'] || req.connection && req.connection.remoteAddress || req.socket && req.socket.remoteAddress || req.connection && req.connection.socket && req.connection.socket.remoteAddress;
return stripPrefixForIPV4MappedIPV6Address(ip);
}
/**
* 检测可能是IpV4-mapped IpV6 格式的ip
* - https://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses
*
* @param ip IpV4-mapped IpV6 string
* @returns {*}
*/
function stripPrefixForIPV4MappedIPV6Address(ip) {
if (/^::1$/.test(ip)) {
ip = '127.0.0.1';
}
if (/^::.{0,4}:(\d{1,3}\.){3}\d{1,3}/.test(ip)) {
ip = ip.replace(/^.*:/, '');
}
return ip;
}
/**
* 二维码生成
* @param {*} port
*/
function generateQrcode(port) {
var ip = getIPv4IPAddress();
if (!ip) {
colorconsole.warn('### App Server ### 本机IP地址为空,无法通过WIFI调试');
return;
}
var addr2 = "http://".concat(ip, ":").concat(port);
colorconsole.info('');
colorconsole.info("### App Server ### \u670D\u52A1\u5668\u5730\u5740:".concat(addr2));
colorconsole.info('### App Server ### 请确保手机与App Server处于相同网段');
colorconsole.info(''); // 输出二维码地址
outputQRCodeOnTerminal(addr2); //startChrome(debugAddr)
}
/**
* 命令行输出二维码
* @param text
*/
function outputQRCodeOnTerminal(text) {
console.info('');
console.info("\u751F\u6210HTTP\u670D\u52A1\u5668\u7684\u4E8C\u7EF4\u7801: ".concat(text));
_qrcodeTerminal["default"].generate(text, {
small: true
});
}
/**
* 获取可用的端口号
* @param port
* @returns {Number}
*/
var getPort = function getPort(port) {
return (// 处理自定义端口
new Promise(function (resolve, reject) {
var server = _net["default"].createServer().listen(port);
server.on('error', function (err) {
if (err.code === 'EADDRINUSE') {
server.close();
resolve(getPort(port + 1));
} else {
reject(err);
}
});
server.on('listening', function () {
server.close();
resolve(port);
});
})
);
};
/**
* 遍历目录文件 同步方法
* @param dir
* @param files 收集的文件列表
* @param isInWhiteListFilter 判断文件是否处于白名单的回调函数
*/
exports.getPort = getPort;
function traverseDirSync(dir, files, isInWhiteListFilter) {
var list = _fs["default"].readdirSync(dir);
list.forEach(function (file) {
file = _path["default"].join(dir, file);
var stat = _fs["default"].statSync(file);
if (stat && stat.isDirectory()) {
traverseDirSync(file, files, isInWhiteListFilter);
} else {
if (typeof isInWhiteListFilter === 'function' && !isInWhiteListFilter(file) || typeof isInWhiteListFilter !== 'function') {
files.push(file);
}
}
});
}
/**
* 获取开发者项目中的项目名称
*/
function getProjectName() {
try {
var pathProject = process.cwd(); // 平级目录 没有src文件夹
var pathManifest = _path["default"].join(pathProject, 'manifest.json');
var contManifest = require(pathManifest);
return contManifest && contManifest["package"] || 'Bundle';
} catch (err) {
colorconsole.error("### App Server ### \u83B7\u53D6\u9879\u76EE\u540D\u79F0\u51FA\u9519\uFF1A".concat(err.message));
}
}
/**
* 获取服务器端的IP
*/
function getIPv4IPAddress() {
var ifaces = _os["default"].networkInterfaces();
var result;
for (var prop in ifaces) {
if (Object.prototype.hasOwnProperty.call(ifaces, prop)) {
var iface = ifaces[prop];
iface.every(function (eachAlias) {
if (eachAlias.family === 'IPv4' && !eachAlias.internal && eachAlias.address !== '127.0.0.1') {
result = eachAlias;
return false;
}
return true;
});
if (result !== void 0) {
break;
}
}
}
return result && result.address;
}
/**
* 获取请求信息
* @param request
* @returns {{clientIp: (any|*|string), sn, linkMode}}
*/
function getClientFromRequest(request) {
var clientIp = getClientIPAddress(request);
var serverIp = getIPv4IPAddress();
var sn = request.header['device-serial-number'];
var linkMode = LINK_MODE.NULL;
if (clientIp === '127.0.0.1' && sn) {
linkMode = LINK_MODE.ADB;
} else if (clientIp !== '127.0.0.1' && clientIp !== serverIp) {
linkMode = LINK_MODE.WIFI;
}
return {
clientIp: clientIp,
sn: sn,
linkMode: linkMode
};
}
/**
* 发送ws事件
*/
function emitWSEvent(wsSocket, evName, data) {
wsSocket.sockets.emit(evName, data || {});
}
/**
* 提供insepctor页面的打开地址
* @param opt
* @param opt.ws 手机端的websocket的地址
* @param opt.serverPort 调试器server的所用端口号
* @returns {string}
*/
function getInspectorUrl(opt) {
var ws = opt.ws,
serverPort = opt.serverPort;
var urlDomain = "http://".concat(getServerIPAndPort(serverPort));
var urlPath = '/inspector/inspector.html';
var urlQueryStr = "?ws=".concat(encodeURI(ws), "&remoteFrontend=true&dockSide=undocked");
return "".concat(urlDomain).concat(urlPath).concat(urlQueryStr);
}
/**
* 获取请求信息
* @param request
* @returns {{sn, linkMode, ws, application, devicePort}}
*/
function getDebugInfoFromRequest(request) {
var _getClientFromRequest = getClientFromRequest(request),
sn = _getClientFromRequest.sn,
linkMode = _getClientFromRequest.linkMode;
var _request$body = request.body,
ws = _request$body.ws,
application = _request$body.application;
var devicePort = ws.split(':')[1].split('/')[0];
return {
sn: sn,
linkMode: linkMode,
ws: ws,
application: application,
devicePort: devicePort
};
}
/**
* 开启一个chrome进程
*/
function startChrome(url) {
return _chromeSimpleLauncher["default"].launch(url);
}
var SOURCE = {
// 启动hapserver的类型
IDE: 'ide'
};
exports.SOURCE = SOURCE;

@@ -1,1 +0,34 @@

"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:!0}),exports.createSocketServer=createSocketServer;var _socket=_interopRequireDefault(require("socket.io")),_utils=require("./utils");function createSocketServer(e,r){var o=(0,_socket.default)(e);(r.context.io=o).on("connection",function(e){o.on("error",function(e){_utils.colorconsole.error("### App Socket Server ### websocket server发生错误: ".concat(e.message))}),_utils.colorconsole.info("### App Socket Server ### websocket用户(".concat((0,_utils.stripPrefixForIPV4MappedIPV6Address)(e.conn.remoteAddress),")连入到websocket server")),e.on("disconnect",function(){_utils.colorconsole.info("### App Socket Server ### websocket client与websocket server断开"),o.emit("user disconnected")})})}
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createSocketServer = createSocketServer;
var _socket = _interopRequireDefault(require("socket.io"));
var _utils = require("./utils");
/**
* Copyright (C) 2017, hapjs.org. All rights reserved.
*/
function createSocketServer(server, app) {
var io = (0, _socket["default"])(server); // 暂时绑定io
app.context.io = io;
io.on('connection', function (socket) {
io.on('error', function (err) {
_utils.colorconsole.error("### App Socket Server ### websocket server\u53D1\u751F\u9519\u8BEF: ".concat(err.message));
});
_utils.colorconsole.info("### App Socket Server ### websocket\u7528\u6237(".concat((0, _utils.stripPrefixForIPV4MappedIPV6Address)(socket.conn.remoteAddress), ")\u8FDE\u5165\u5230websocket server"));
socket.on('disconnect', function () {
_utils.colorconsole.info('### App Socket Server ### websocket client与websocket server断开');
io.emit('user disconnected');
});
});
}

@@ -1,1 +0,24 @@

"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _path=_interopRequireDefault(require("path")),port=process.env.PORT||"8000",clientLogPath=_path.default.join(__dirname,"../client.json"),_default={port:port,clientLogPath:clientLogPath};exports.default=_default;
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _path = _interopRequireDefault(require("path"));
/**
* Copyright (C) 2017, hapjs.org. All rights reserved.
*/
// 端口
var port = process.env.PORT || '8000';
var clientLogPath = _path["default"].join(__dirname, '../client.json');
var _default = {
port: port,
clientLogPath: clientLogPath
};
exports["default"] = _default;

@@ -1,1 +0,115 @@

"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault"),_regenerator=_interopRequireDefault(require("@babel/runtime/regenerator")),_asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")),_slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));require("./common/regenerator");var _http=_interopRequireDefault(require("http")),_config=_interopRequireDefault(require("./config")),_app=_interopRequireDefault(require("./app")),_utils=require("./common/utils"),digits=process.versions.node.split("."),_digits=digits=digits.map(function(e){return parseInt(e,10)}),_digits2=(0,_slicedToArray2.default)(_digits,2),major=_digits2[0],minor=_digits2[1],supportAsyncAwait=7<major||7===major&&6<=minor;function start(e,r){return _start.apply(this,arguments)}function _start(){return(_start=(0,_asyncToGenerator2.default)(_regenerator.default.mark(function e(r,t){var o,i;return _regenerator.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:r.context.config=t,o=_http.default.createServer(r.callback()),i=t.port,o.listen(i,function(){(0,_utils.generateQrcode)(i)}),o.on("error",function(e){_utils.colorconsole.error("### App Server ### 服务器错误: ".concat(e.message)),"EADDRINUSE"===e.code&&_utils.colorconsole.error("### App Server ### 服务器错误:端口 ".concat(i," 被占用, 请检查"))}),process.on("SIGINT",function(){_utils.colorconsole.info("### App Server ### SIGINT信号"),_utils.colorconsole.info("### App Server ### 退出server进程 pid: ".concat(process.pid)),process.exit()}),process.on("uncaughtException",function(e){_utils.colorconsole.error("### App Server ### 未定义的异常, 出错信息: ".concat(e.message))}),process.on("message",function(e){e&&e.source&&(r.source=e.source)});case 8:case"end":return e.stop()}},e)}))).apply(this,arguments)}supportAsyncAwait||require("@babel/register")({only:[/\bkoa-?/]}),module.exports=function(e){(e.port||e.clientLogPath)&&Object.assign(_config.default,{port:e.port,clientLogPath:e.clientLogPath}),start(_app.default,_config.default)};
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _http = _interopRequireDefault(require("http"));
var _config = _interopRequireDefault(require("./config"));
var _app = _interopRequireDefault(require("./app"));
var _utils = require("./common/utils");
/**
* Copyright (C) 2017, hapjs.org. All rights reserved.
*/
// https://koajs.com/#async-functions-with-babel
// https://babeljs.io/docs/en/babel-register/#ignores-node-modules-by-default
var digits = process.versions.node.split('.'); // '01' => 1
digits = digits.map(function (num) {
return parseInt(num, 10);
});
var _digits = digits,
_digits2 = (0, _slicedToArray2["default"])(_digits, 2),
major = _digits2[0],
minor = _digits2[1];
var supportAsyncAwait = major > 7 || major === 7 && minor >= 6;
if (!supportAsyncAwait) {
require('@babel/register')({
only: [/\bkoa-?/]
});
}
function start(_x, _x2) {
return _start.apply(this, arguments);
}
/**
* 启动开发服务
*
* @param {Object} options - 参数配置项
* @param {String|Number} [options.port] - 服务端口
*/
function _start() {
_start = (0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee(app, config) {
var server, port;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
app.context.config = config;
server = _http["default"].createServer(app.callback());
port = config.port; // 容错端口、请求地址
// port = await getPort(port)
server.listen(port, function () {
(0, _utils.generateQrcode)(port);
});
server.on('error', function (err) {
_utils.colorconsole.error("### App Server ### \u670D\u52A1\u5668\u9519\u8BEF: ".concat(err.message));
if (err.code === 'EADDRINUSE') {
_utils.colorconsole.error("### App Server ### \u670D\u52A1\u5668\u9519\u8BEF:\u7AEF\u53E3 ".concat(port, " \u88AB\u5360\u7528, \u8BF7\u68C0\u67E5"));
}
});
process.on('SIGINT', function () {
_utils.colorconsole.info('### App Server ### SIGINT信号');
_utils.colorconsole.info("### App Server ### \u9000\u51FAserver\u8FDB\u7A0B pid: ".concat(process.pid));
process.exit();
});
process.on('uncaughtException', function (err) {
_utils.colorconsole.error("### App Server ### \u672A\u5B9A\u4E49\u7684\u5F02\u5E38, \u51FA\u9519\u4FE1\u606F: ".concat(err.message));
});
process.on('message', function (data) {
if (data && data.source) {
// 判断server是否来自于ide
app.source = data.source;
}
});
case 8:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return _start.apply(this, arguments);
}
module.exports = function launch(options) {
if (options.port || options.clientLogPath) {
Object.assign(_config["default"], {
port: options.port,
clientLogPath: options.clientLogPath
});
} // 启动服务器
start(_app["default"], _config["default"]);
};

@@ -1,1 +0,129 @@

"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:!0}),exports.record=record;var _fs=_interopRequireDefault(require("fs")),_path=_interopRequireDefault(require("path")),_utils=require("../common/utils"),CLIENT_PORT=39517;function record(e,t){var r=e.config.clientLogPath;e.config.clearRecords&&_fs.default.existsSync(r)&&(_fs.default.unlinkSync(r),_utils.colorconsole.info("### App Server ### 清空调试设备记录"));var i=(0,_utils.getClientFromRequest)(e.request),n=i.sn,s=i.clientIp,l=i.linkMode,o={sn:n,ip:s,port:CLIENT_PORT};switch(l){case _utils.LINK_MODE.WIFI:_utils.colorconsole.info("### App Server ### 记录从".concat(s,"进入的HTTP请求")),recordClient(r,o);break;case _utils.LINK_MODE.ADB:(o=getRecordClient(r,n,s))?(_utils.colorconsole.info("### App Server ### 记录从设备(".concat(n,")进入的HTTP请求")),recordClient(r,o)):_utils.colorconsole.warn("### App Server ### :记录设备(".concat(n,")失败"))}t()}function recordClient(e,t){var r=_path.default.dirname(e),i={clients:[]};if(_fs.default.existsSync(r)){if(_fs.default.existsSync(e)&&(i=JSON.parse(_fs.default.readFileSync(e).toString())).clients instanceof Array)for(i.clients=i.clients.filter(function(e){return e.ip!==t.ip||e.port!==t.port});4<i.clients.length;)i.clients.shift()}else(0,_utils.mkdirsSync)(r);i.clients.push(t),_fs.default.writeFileSync(e,JSON.stringify(i))}function getRecordClient(e,t,r){if(_fs.default.existsSync(e)){var i=JSON.parse(_fs.default.readFileSync(e).toString()).clients;return(i=i instanceof Array?i:[]).find(function(e){return e.sn===t&&e.ip===r&&e.port})}}
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.record = record;
var _fs = _interopRequireDefault(require("fs"));
var _path = _interopRequireDefault(require("path"));
var _utils = require("../common/utils");
var CLIENT_PORT = 39517;
/**
* 记录日志
* @param {} ctx
* @param {*} next
*/
function record(ctx, next) {
//client.json的路径
var clientPath = ctx.config.clientLogPath; // 清空调试设备记录
var clearRecords = ctx.config.clearRecords;
if (clearRecords) {
if (_fs["default"].existsSync(clientPath)) {
_fs["default"].unlinkSync(clientPath);
_utils.colorconsole.info('### App Server ### 清空调试设备记录');
}
}
var _getClientFromRequest = (0, _utils.getClientFromRequest)(ctx.request),
sn = _getClientFromRequest.sn,
clientIp = _getClientFromRequest.clientIp,
linkMode = _getClientFromRequest.linkMode;
var client = {
sn: sn,
ip: clientIp,
port: CLIENT_PORT
};
switch (linkMode) {
case _utils.LINK_MODE.WIFI:
_utils.colorconsole.info("### App Server ### \u8BB0\u5F55\u4ECE".concat(clientIp, "\u8FDB\u5165\u7684HTTP\u8BF7\u6C42"));
recordClient(clientPath, client);
break;
case _utils.LINK_MODE.ADB:
// ADB模式下需要先读取连接时记录的信息
client = getRecordClient(clientPath, sn, clientIp);
if (client) {
_utils.colorconsole.info("### App Server ### \u8BB0\u5F55\u4ECE\u8BBE\u5907(".concat(sn, ")\u8FDB\u5165\u7684HTTP\u8BF7\u6C42"));
recordClient(clientPath, client);
} else {
_utils.colorconsole.warn("### App Server ### \uFF1A\u8BB0\u5F55\u8BBE\u5907(".concat(sn, ")\u5931\u8D25"));
}
break;
}
next();
}
/**
* 记录地址
* @param filePath {String}
* @param newClient {sn, ip, port}
*
*/
function recordClient(filePath, newClient) {
// 目录存在
var pathParentDir = _path["default"].dirname(filePath);
var tmpJSONData = {
clients: []
};
if (!_fs["default"].existsSync(pathParentDir)) {
(0, _utils.mkdirsSync)(pathParentDir);
} else if (_fs["default"].existsSync(filePath)) {
tmpJSONData = JSON.parse(_fs["default"].readFileSync(filePath).toString());
if (tmpJSONData.clients instanceof Array) {
// 过滤相同的记录
tmpJSONData.clients = tmpJSONData.clients.filter(function (client) {
return client.ip !== newClient.ip || client.port !== newClient.port;
}); // 保留最后的4条记录,最多记录5条
while (tmpJSONData.clients.length > 4) {
tmpJSONData.clients.shift();
}
}
} // 写入文件
tmpJSONData.clients.push(newClient);
_fs["default"].writeFileSync(filePath, JSON.stringify(tmpJSONData));
}
/**
* 根据设备sn和ip获取设备的记录
* @param filePath
* @param sn
* @param ip
* @returns {null}
*/
function getRecordClient(filePath, sn, ip) {
if (_fs["default"].existsSync(filePath)) {
var _JSON$parse = JSON.parse(_fs["default"].readFileSync(filePath).toString()),
clients = _JSON$parse.clients;
clients = clients instanceof Array ? clients : [];
return clients.find(function (client) {
return client.sn === sn && client.ip === ip && client.port;
});
}
}

@@ -1,1 +0,127 @@

"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator")),_asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")),_fs=_interopRequireDefault(require("fs")),_path=_interopRequireDefault(require("path")),_koaRouter=_interopRequireDefault(require("koa-router")),_utils=require("../common/utils"),router=(0,_koaRouter.default)(),RPKS_SUPPORT_VERSION_FROM=1040;function getDistFilePath(e,r,t){var a;return a=_path.default.join(e,"".concat(r,".debug.").concat(t)),_fs.default.existsSync(a)?a:(a=_path.default.join(e,"".concat(r,".release.").concat(t)),_fs.default.existsSync(a)?a:void 0)}router.get("/",function(){var t=(0,_asyncToGenerator2.default)(_regenerator.default.mark(function e(r,t){return _regenerator.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return r.response.redirect("/home/index.html"),e.next=3,t();case 3:case"end":return e.stop()}},e)}));return function(e,r){return t.apply(this,arguments)}}()),router.get("/bundle",function(){var t=(0,_asyncToGenerator2.default)(_regenerator.default.mark(function e(r,t){var a,n,u,o,i;return _regenerator.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return a=process.cwd(),n=(0,_utils.getProjectName)(),u=_path.default.join(a,"dist"),(o=r.request.query.platformVersion)&&RPKS_SUPPORT_VERSION_FROM<=o&&(i=getDistFilePath(u,n,"rpks")),i||(i=getDistFilePath(u,n,"rpk")),i?(r.body=_fs.default.createReadStream(i),r.set("Content-Type","application/octet-stream")):(console.error("### App Server ### 项目dist目录下不存在rpk文件:".concat(u)),r.throw("404","无法找到项目的rpk文件")),e.next=9,t();case 9:case"end":return e.stop()}},e)}));return function(e,r){return t.apply(this,arguments)}}());var _default=router;exports.default=_default;
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _fs = _interopRequireDefault(require("fs"));
var _path = _interopRequireDefault(require("path"));
var _koaRouter = _interopRequireDefault(require("koa-router"));
var _utils = require("../common/utils");
var router = (0, _koaRouter["default"])(); // 能使用rpks能力的调试器最低版本
var RPKS_SUPPORT_VERSION_FROM = 1040;
/**
* 首页
*/
router.get('/',
/*#__PURE__*/
function () {
var _ref = (0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee(ctx, next) {
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
ctx.response.redirect('/home/index.html');
_context.next = 3;
return next();
case 3:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return function (_x, _x2) {
return _ref.apply(this, arguments);
};
}()); // 下载rpk文件
router.get('/bundle',
/*#__PURE__*/
function () {
var _ref2 = (0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee2(ctx, next) {
var projectPath, projectName, projectDist, platformVersion, projectDistFilePath;
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
projectPath = process.cwd();
projectName = (0, _utils.getProjectName)();
projectDist = _path["default"].join(projectPath, 'dist');
platformVersion = ctx.request.query.platformVersion;
if (platformVersion && platformVersion >= RPKS_SUPPORT_VERSION_FROM) {
projectDistFilePath = getDistFilePath(projectDist, projectName, 'rpks');
}
if (!projectDistFilePath) {
projectDistFilePath = getDistFilePath(projectDist, projectName, 'rpk');
}
if (projectDistFilePath) {
ctx.body = _fs["default"].createReadStream(projectDistFilePath);
ctx.set('Content-Type', 'application/octet-stream');
} else {
console.error("### App Server ### \u9879\u76EEdist\u76EE\u5F55\u4E0B\u4E0D\u5B58\u5728rpk\u6587\u4EF6\uFF1A".concat(projectDist));
ctx["throw"]('404', '无法找到项目的rpk文件');
}
_context2.next = 9;
return next();
case 9:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
return function (_x3, _x4) {
return _ref2.apply(this, arguments);
};
}());
/**
* 获取文件路径
* @param projectDist
* @param projectName
* @param fileType
* @returns {String}
*/
function getDistFilePath(projectDist, projectName, fileType) {
var projectDistFilePath;
projectDistFilePath = _path["default"].join(projectDist, "".concat(projectName, ".debug.").concat(fileType));
if (_fs["default"].existsSync(projectDistFilePath)) {
return projectDistFilePath;
} else {
projectDistFilePath = _path["default"].join(projectDist, "".concat(projectName, ".release.").concat(fileType));
if (_fs["default"].existsSync(projectDistFilePath)) {
return projectDistFilePath;
}
}
}
var _default = router;
exports["default"] = _default;

@@ -1,1 +0,283 @@

"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator")),_asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")),_koaRouter=_interopRequireDefault(require("koa-router")),_qrImage=_interopRequireDefault(require("qr-image")),_utils=require("../common/utils"),router=(0,_koaRouter.default)();router.post("/",function(){var t=(0,_asyncToGenerator2.default)(_regenerator.default.mark(function e(r,t){var n,o,a,i,u,s,c,l,p;return _regenerator.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(e.prev=0,n=r.request.body,o=r.method,a=r.path,i="ws"in n&&0<=n.ws.indexOf("inspector"),u="application"in n&&0<=n.application.indexOf("hybrid.loader"),"post"!==o.toLowerCase()||"/"!==a||!i||!u){e.next=15;break}_utils.colorconsole.warn("调试器已有重要更新,请更新调试器"),(0,_utils.emitWSEvent)(r.io,"informUpdate"),s=n.ws,c=n.application,l=r.config.port,p=(0,_utils.getInspectorUrl)({ws:s,port:l}),(0,_utils.emitWSEvent)(r.io,"appRegistered",{inspectorUrl:p,application:c}),_utils.colorconsole.info("请访问以下链接进行调试:\n\n".concat(p,"\n")),e.next=17;break;case 15:return e.next=17,t();case 17:e.next=25;break;case 19:return e.prev=19,e.t0=e.catch(0),_utils.colorconsole.error("### App Server ### 出错信息: ".concat(e.t0.message)),_utils.colorconsole.error("### App Server ### 当前调试器与toolkit不兼容,请更新调试器。"),e.next=25,t();case 25:case"end":return e.stop()}},e,null,[[0,19]])}));return function(e,r){return t.apply(this,arguments)}}()),router.post("/postwsid",function(){var t=(0,_asyncToGenerator2.default)(_regenerator.default.mark(function e(r,t){var n,o,a,i,u;return _regenerator.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return _utils.colorconsole.info("### App Server ### 收到App注册信息, 格式:\n".concat(JSON.stringify(r.request.body),"\n")),n=r.request.body,o=n.ws,a=n.application,i=r.config.port,u=(0,_utils.getInspectorUrl)({ws:o,port:i}),(0,_utils.emitWSEvent)(r.io,"appRegistered",{inspectorUrl:u,application:a}),_utils.colorconsole.info("请访问以下链接进行调试:\n\n".concat(u,"\n")),e.next=8,t();case 8:case"end":return e.stop()}},e)}));return function(e,r){return t.apply(this,arguments)}}()),router.post("/poststdbg",function(){var t=(0,_asyncToGenerator2.default)(_regenerator.default.mark(function e(r,t){var n,o,a,i,u,s,c,l,p,f,d;return _regenerator.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(n=(0,_utils.getDebugInfoFromRequest)(r.request),o=n.sn,a=n.linkMode,i=n.devicePort,u=n.application,s=n.ws,a===_utils.LINK_MODE.ADB)return e.next=6,r.adbDebugger.forwardForWsChannel(o,i);e.next=15;break;case 6:if(c=e.sent,l=c.localWsPort,p=c.err)return _utils.colorconsole.error("startDebug(): adb forward 端口映射失败: ".concat(p.message)),e.next=13,t();e.next=14;break;case 13:return e.abrupt("return");case 14:s=s.replace(i,l);case 15:if(f=r.config.port,d=(0,_utils.getInspectorUrl)({ws:s,port:f}),(0,_utils.emitWSEvent)(r.io,"appRegistered",{inspectorUrl:d,application:u}),_utils.colorconsole.info("请访问以下链接进行调试:\n\n".concat(d,"\n")),r.app.source!==_utils.SOURCE.IDE){e.next=23;break}process.send({url:d,type:"openWin"}),e.next=25;break;case 23:return e.next=25,(0,_utils.startChrome)(d);case 25:return e.next=27,t();case 27:case"end":return e.stop()}},e)}));return function(e,r){return t.apply(this,arguments)}}()),router.get("/qrcode",function(){var t=(0,_asyncToGenerator2.default)(_regenerator.default.mark(function e(r,t){var n,o,a;return _regenerator.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return n=r.config.port,o="http://".concat((0,_utils.getServerIPAndPort)(n)),a=_qrImage.default.image(o,{size:9}),r.type="image/png",r.body=a,e.next=7,t();case 7:case"end":return e.stop()}},e)}));return function(e,r){return t.apply(this,arguments)}}());var _default=router;exports.default=_default;
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _koaRouter = _interopRequireDefault(require("koa-router"));
var _qrImage = _interopRequireDefault(require("qr-image"));
var _utils = require("../common/utils");
var router = (0, _koaRouter["default"])();
/**
* @desc 适配老版本的应用加载器。
* 使用老版本的应用加载器,会发送post到/, 并不会向/postwsid发请求;
* 在新版本toolkit/老版本的应用加载器的组合下,用户将无法无法访问调试界面。因此提示用户更新应用加载器,并把请求转发至/postwsid;
*/
router.post('/',
/*#__PURE__*/
function () {
var _ref = (0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee(ctx, next) {
var body, method, path, isWs, isHybridLoader, ws, application, port, inspectorUrl;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
body = ctx.request.body;
method = ctx.method, path = ctx.path;
isWs = 'ws' in body && body.ws.indexOf('inspector') >= 0;
isHybridLoader = 'application' in body && body.application.indexOf('hybrid.loader') >= 0;
if (!(method.toLowerCase() === 'post' && path === '/' && isWs && isHybridLoader)) {
_context.next = 15;
break;
}
// 通知用户更新应用加载器版本
_utils.colorconsole.warn('调试器已有重要更新,请更新调试器');
(0, _utils.emitWSEvent)(ctx.io, 'informUpdate');
ws = body.ws, application = body.application; // 生成调试url,并且向页面输出调试APP信息
port = ctx.config.port;
inspectorUrl = (0, _utils.getInspectorUrl)({
ws: ws,
port: port
});
(0, _utils.emitWSEvent)(ctx.io, 'appRegistered', {
inspectorUrl: inspectorUrl,
application: application
});
_utils.colorconsole.info("\u8BF7\u8BBF\u95EE\u4EE5\u4E0B\u94FE\u63A5\u8FDB\u884C\u8C03\u8BD5\uFF1A\n\n".concat(inspectorUrl, "\n"));
_context.next = 17;
break;
case 15:
_context.next = 17;
return next();
case 17:
_context.next = 25;
break;
case 19:
_context.prev = 19;
_context.t0 = _context["catch"](0);
_utils.colorconsole.error("### App Server ### \u51FA\u9519\u4FE1\u606F: ".concat(_context.t0.message));
_utils.colorconsole.error('### App Server ### 当前调试器与toolkit不兼容,请更新调试器。');
_context.next = 25;
return next();
case 25:
case "end":
return _context.stop();
}
}
}, _callee, null, [[0, 19]]);
}));
return function (_x, _x2) {
return _ref.apply(this, arguments);
};
}());
/**
* 手机注册
*/
router.post('/postwsid',
/*#__PURE__*/
function () {
var _ref2 = (0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee2(ctx, next) {
var _ctx$request$body, ws, application, port, inspectorUrl;
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_utils.colorconsole.info("### App Server ### \u6536\u5230App\u6CE8\u518C\u4FE1\u606F, \u683C\u5F0F:\n".concat(JSON.stringify(ctx.request.body), "\n"));
_ctx$request$body = ctx.request.body, ws = _ctx$request$body.ws, application = _ctx$request$body.application; // 生成调试url,并且向页面输出调试APP信息
port = ctx.config.port;
inspectorUrl = (0, _utils.getInspectorUrl)({
ws: ws,
port: port
});
(0, _utils.emitWSEvent)(ctx.io, 'appRegistered', {
inspectorUrl: inspectorUrl,
application: application
});
_utils.colorconsole.info("\u8BF7\u8BBF\u95EE\u4EE5\u4E0B\u94FE\u63A5\u8FDB\u884C\u8C03\u8BD5\uFF1A\n\n".concat(inspectorUrl, "\n"));
_context2.next = 8;
return next();
case 8:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
return function (_x3, _x4) {
return _ref2.apply(this, arguments);
};
}());
/**
* 开始调试
*/
router.post('/poststdbg',
/*#__PURE__*/
function () {
var _ref3 = (0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee3(ctx, next) {
var params, sn, linkMode, devicePort, application, ws, _ref4, localWsPort, err, port, inspectorUrl;
return _regenerator["default"].wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
params = (0, _utils.getDebugInfoFromRequest)(ctx.request);
sn = params.sn, linkMode = params.linkMode, devicePort = params.devicePort, application = params.application;
ws = params.ws; // ADB调试模式
if (!(linkMode === _utils.LINK_MODE.ADB)) {
_context3.next = 15;
break;
}
_context3.next = 6;
return ctx.adbDebugger.forwardForWsChannel(sn, devicePort);
case 6:
_ref4 = _context3.sent;
localWsPort = _ref4.localWsPort;
err = _ref4.err;
if (!err) {
_context3.next = 14;
break;
}
_utils.colorconsole.error("startDebug(): adb forward \u7AEF\u53E3\u6620\u5C04\u5931\u8D25: ".concat(err.message));
_context3.next = 13;
return next();
case 13:
return _context3.abrupt("return");
case 14:
// ws中是手机的端口号,ADB模式下需要替换为forward对应的pc端口
ws = ws.replace(devicePort, localWsPort);
case 15:
// 生成调试url,并且向页面输出调试APP信息
port = ctx.config.port;
inspectorUrl = (0, _utils.getInspectorUrl)({
ws: ws,
port: port
});
(0, _utils.emitWSEvent)(ctx.io, 'appRegistered', {
inspectorUrl: inspectorUrl,
application: application
});
_utils.colorconsole.info("\u8BF7\u8BBF\u95EE\u4EE5\u4E0B\u94FE\u63A5\u8FDB\u884C\u8C03\u8BD5\uFF1A\n\n".concat(inspectorUrl, "\n"));
if (!(ctx.app.source === _utils.SOURCE.IDE)) {
_context3.next = 23;
break;
}
// 判断hapserver是否由ide启动
process.send({
url: inspectorUrl,
type: 'openWin'
});
_context3.next = 25;
break;
case 23:
_context3.next = 25;
return (0, _utils.startChrome)(inspectorUrl);
case 25:
_context3.next = 27;
return next();
case 27:
case "end":
return _context3.stop();
}
}
}, _callee3);
}));
return function (_x5, _x6) {
return _ref3.apply(this, arguments);
};
}());
/**
* 生成二维码
*/
router.get('/qrcode',
/*#__PURE__*/
function () {
var _ref5 = (0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee4(ctx, next) {
var port, qrText, image;
return _regenerator["default"].wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
port = ctx.config.port;
qrText = "http://".concat((0, _utils.getServerIPAndPort)(port));
image = _qrImage["default"].image(qrText, {
size: 9
});
ctx.type = 'image/png';
ctx.body = image;
_context4.next = 7;
return next();
case 7:
case "end":
return _context4.stop();
}
}
}, _callee4);
}));
return function (_x7, _x8) {
return _ref5.apply(this, arguments);
};
}());
var _default = router;
exports["default"] = _default;

19

package.json
{
"name": "quickgame-server",
"version": "0.1.10",
"version": "0.1.11",
"description": "quickgame server",

@@ -12,15 +12,14 @@ "main": "lib/index.js",

"license": "ISC",
"keywords": [
"quickgame",
"game",
"quickgame-server"
],
"devDependencies": {
"@babel/cli": "^7.2.0",
"@babel/core": "^7.2.0",
"@babel/preset-env": "^7.2.0",
"adb-commander": "0.0.7",
"adb-devices-emitter": "0.0.2",
"chalk": "^2.4.1",
"http": "0.0.0",
"opn": "^5.4.0",
"os": "^0.1.1",
"util": "^0.11.1"
"chalk": "^2.4.1"
},
"dependencies": {
"@babel/runtime": "^7.4.4",
"chrome-simple-launcher": "0.0.7",

@@ -35,3 +34,3 @@ "koa": "^2.6.2",

},
"gitHead": "f9a313d1aef7b857f076adf011c3d529d0d03dce"
"gitHead": "4aad92a79f251386082e0c224de2db14cb94a297"
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc