- 新增 BattleNet、WeGame、GOG 等游戏平台扫描支持 - 添加系统代理绕过列表和 Bootstrap DNS 配置 - 实现应用重置功能,支持清理数据并重启 - 增加主题模式选择(亮色/暗色/自动) - 优化本地游戏扫描性能,支持并行扫描 - 改进代理监控,支持链式代理子进程检测 - 修复日志发送时的窗口销毁检查 - 更新图标和侧边栏布局 - 移除 prepare-singbox-core 脚本,简化构建流程
55 lines
1.5 KiB
TypeScript
55 lines
1.5 KiB
TypeScript
|
|
import net from 'net'
|
|
|
|
/**
|
|
* 查找可用端口
|
|
*
|
|
* 从指定的起始端口开始,寻找连续 count 个可用端口。
|
|
*
|
|
* @param startPort - 起始端口号
|
|
* @param count - 需要的连续可用端口数量,默认 1
|
|
* @returns Promise<number> - 找到的第一个可用端口号
|
|
* @throws Error - 如果遍历到 65535 仍未找到可用端口
|
|
*/
|
|
export async function findAvailablePort(startPort: number, count: number = 1): Promise<number> {
|
|
let port = startPort
|
|
while (true) {
|
|
let allAvailable = true
|
|
for (let i = 0; i < count; i++) {
|
|
const isAvailable = await isPortAvailable(port + i)
|
|
if (!isAvailable) {
|
|
allAvailable = false
|
|
break
|
|
}
|
|
}
|
|
|
|
if (allAvailable) {
|
|
return port
|
|
}
|
|
|
|
port++
|
|
if (port > 65535) {
|
|
throw new Error('未找到可用端口')
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 检查指定端口是否可用
|
|
*
|
|
* 尝试在本地监听该端口,如果成功则认为可用。
|
|
*
|
|
* @param port - 要检查的端口号
|
|
* @returns Promise<boolean> - true 表示可用,false 表示已被占用
|
|
*/
|
|
function isPortAvailable(port: number): Promise<boolean> {
|
|
return new Promise((resolve) => {
|
|
const server = net.createServer()
|
|
server.once('error', () => resolve(false))
|
|
server.once('listening', () => {
|
|
server.close(() => resolve(true))
|
|
})
|
|
server.listen(port, '127.0.0.1')
|
|
})
|
|
}
|