UNPKG

@sword-code-practice/sword-plugin-server

Version:

sword框架内置在运行server上的插件

70 lines (63 loc) 1.78 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); const http = require('http'); const net = require('net'); const swordPluginLog = require('@sword-code-practice/sword-plugin-log'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e["default"] : e; } const net__default = /*#__PURE__*/_interopDefaultLegacy(net); const defaultServerConfig = { port: 3e3 }; const startServer = async (app, serverConfig = defaultServerConfig) => { let key; for (key in serverConfig) { if (!serverConfig[key]) { serverConfig[key] = defaultServerConfig[key]; } } const start = () => { swordPluginLog.log.info(`HTTP\u670D\u52A1\u542F\u52A8\u4E2D...`); const server = http.createServer(app); try { server.listen(serverConfig.port); swordPluginLog.log.success(`\u7A0B\u5E8F\u8FD0\u884C\u5728${serverConfig.port}\u7AEF\u53E3\u4E0A`); } catch (error) { swordPluginLog.log.err(JSON.stringify(error)); } }; const tryUsePort = async () => { const used = await portUsed(serverConfig.port); if (used === false) { serverConfig.port && serverConfig.port++; return await tryUsePort(); } else { return true; } }; if (await tryUsePort()) { start(); } }; const portUsed = (port) => { return new Promise((resolve) => { const server = net__default.createServer().listen(port); server.on("listening", () => { server.close(); resolve(port); }); server.on("error", (err) => { if (err.code == "EADDRINUSE") { resolve(false); } }); }); }; const useServer = () => { return { name: "server", server: { start: startServer } }; }; exports.useServer = useServer;