@quick-game/cli
Version:
Command line interface for rapid qg development
135 lines (133 loc) • 4.61 kB
JavaScript
;
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
_Object$defineProperty(exports, "__esModule", {
value: true
});
exports.initServer = initServer;
_Object$defineProperty(exports, "notifyUpdate", {
enumerable: true,
get: function () {
return _notify.default;
}
});
exports.stopServer = stopServer;
var _now = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/date/now"));
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
var _koa = _interopRequireDefault(require("koa"));
var _path = _interopRequireDefault(require("path"));
var _koaStatic = _interopRequireDefault(require("koa-static"));
var _http = _interopRequireDefault(require("http"));
var _internalIp = _interopRequireDefault(require("internal-ip"));
var _koaBodyparser = _interopRequireDefault(require("koa-bodyparser"));
var _qrcode = _interopRequireDefault(require("qrcode"));
var _koaRouter = _interopRequireDefault(require("koa-router"));
var _portfinder = _interopRequireDefault(require("portfinder"));
var _router = require("./router.js");
var _logger = require("./logger.js");
var _recordClient = require("./record-client.js");
var _notify = _interopRequireDefault(require("./notify.js"));
var _wsserver = require("./wsserver.js");
var _index = require("./adb/index.js");
var _requestIde = require("../utils/requestIde.js");
const compress = require('koa-compress');
let server = null;
async function initServer(args) {
const app = new _koa.default();
const route = new _koaRouter.default();
const port = await _portfinder.default.getPortPromise();
app.use((0, _koaBodyparser.default)());
app.use(compress());
app.use((0, _koaStatic.default)(_path.default.resolve(__dirname, './client'), {
maxAge: 2592000000,
// 缓存时间为一年
gzip: true,
setHeaders: res => {
res.setHeader('Cache-Control', 'public, max-age=2592000');
res.setHeader('Expires', new Date((0, _now.default)() + 2592000000).toUTCString());
}
}));
app.use(_logger.logger);
app.use(route.get('/', _router.indexRouter).routes());
app.use(route.get('/bundle', _router.bundleRouter).routes());
app.use(route.post('/poststdbg', ctx => (0, _router.poststdbgRouter)(ctx, args)).routes());
app.use(route.get('/debug', _router.debugRouter).routes());
server = _http.default.Server(app.callback());
beforeStart(server, app, port);
app.on('error', (err, ctx) => {
console.error('server error', err);
});
const ip = _internalIp.default.v4.sync();
const url = `http://${ip}:${port}`;
// 下面的log不能随便改,否则cocos IDE预览会有问题
server.listen(port, () => {
console.log(`地址 ${url}`);
console.log(`若二维码无法识别,可打开以上地址尝试~`);
console.log('请确保手机与App Server处于相同网段!');
_qrcode.default.toString(url, {
type: 'terminal',
small: true
}, function (err, url) {
if (err) {
// Handle the error, e.g., log it or deal with it appropriately
console.error('Failed to generate QR code:', err);
return; // Early return to prevent further processing
}
console.log(url);
});
if (args.ide) {
(0, _requestIde.fetchInfo)({
url,
port
}, 'startDebug');
}
});
// 监听进程终止信号
process.on('SIGINT', handleShutdown);
process.on('SIGTERM', handleShutdown);
async function handleShutdown() {
console.log('\n### App Server ### 服务器即将关闭');
if (args.ide) {
await (0, _requestIde.fetchInfo)({
url,
port
}, 'stopDebug');
}
process.exit(0);
}
return url;
}
function stopServer() {
return new _promise.default(resolve => {
if (!server) {
resolve({
stopServerError: 'no server'
});
return;
}
try {
server.close(data => {
resolve({
stopServerError: data
});
});
} catch (err) {
console.error(`### App Server ### 服务器关闭失败: ${err.message}`);
resolve({
stopServerError: err
});
throw err;
}
});
}
async function beforeStart(server, app, port) {
await (0, _wsserver.createSocketServer)(server, app);
(0, _index.createADBDebugger)({
pathClientLog: _recordClient.clientRecordPath,
localReversePort: port
}).then(data => {
app.context.adbDebugger = data;
}).catch(err => {
console.error(err);
});
}