'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var nodejs_net = require('../nodejs/net.js');

/**
 * 获取可用的端口号
 * 从指定端口开始检测，如果端口被占用则自动尝试下一个端口，直到找到可用端口
 * @param port - 起始端口号
 * @returns {Promise<number>} - 返回可用的端口号
 * @example
 * ```ts
 * // 从 3000 端口开始查找可用端口
 * getValidPort(3000).then(port => {
 *   console.log(`可用端口: ${port}`);
 * });
 * ```
 */
function getValidPort(port) {
  var net = nodejs_net.getNet();
  var server = net.createServer().listen(port);
  return new Promise(function (resolve, reject) {
    // 如果监听成功，表示端口没有被其他服务占用，端口可用，取消监听，返回端口给调用者。
    server.on('listening', function () {
      server.close();
      resolve(port);
    });
    // 如果监听出错，端口+1，继续监听，直到监听成功。
    server.on('error', function (err) {
      if (err.code === 'EADDRINUSE') {
        resolve(getValidPort(port + 1));
        console.log("this port ".concat(port, " is occupied try another."));
      } else {
        reject(err);
      }
    });
  });
}

exports.getValidPort = getValidPort;
