@@ -9,7 +9,12 @@ import { app, BrowserWindow, dialog } from "electron";
9
9
10
10
import log from "electron-log" ;
11
11
import { z } from "zod" ;
12
- import { PortManager } from "./portManager" ;
12
+ import {
13
+ findAltPort ,
14
+ getPidFromPort ,
15
+ getProcessNameFromPid ,
16
+ url2HostInfo ,
17
+ } from "./portManager" ;
13
18
import { ipcMainSend } from "@/electron/ipc" ;
14
19
15
20
import {
@@ -229,48 +234,45 @@ export class EngineManager {
229
234
return ;
230
235
}
231
236
232
- const engineInfoUrl = new URL ( engineInfo . host ) ;
233
- const portManager = new PortManager (
234
- engineInfoUrl . hostname ,
235
- parseInt ( engineInfoUrl . port )
236
- ) ;
237
+ // { hostname (localhost), port (50021) } <- url (http://localhost:50021)
238
+ const engineHostInfo = url2HostInfo ( new URL ( engineInfo . host ) ) ;
237
239
238
240
log . info (
239
- `ENGINE ${ engineId } : Checking whether port ${ engineInfoUrl . port } is assignable...`
241
+ `ENGINE ${ engineId } : Checking whether port ${ engineHostInfo . port } is assignable...`
240
242
) ;
241
243
242
- // ポートを既に割り当てられているプロセスidの取得 : undefined → ポートが空いている
243
- const processId = await portManager . getProcessIdFromPort ( ) ;
244
- if ( processId != = undefined ) {
245
- const processName = await portManager . getProcessNameFromPid ( processId ) ;
244
+ // ポートを既に割り当てているプロセスidの取得 : undefined → ポートが空いている
245
+ const pid = await getPidFromPort ( engineHostInfo ) ;
246
+ if ( pid ! = undefined ) {
247
+ const processName = await getProcessNameFromPid ( engineHostInfo , pid ) ;
246
248
log . warn (
247
- `ENGINE ${ engineId } : Port ${ engineInfoUrl . port } has already been assigned by ${ processName } (pid=${ processId } )`
249
+ `ENGINE ${ engineId } : Port ${ engineHostInfo . port } has already been assigned by ${ processName } (pid=${ pid } )`
248
250
) ;
249
251
250
- // 代替ポート検索
251
- const altPort = await portManager . findAltPort ( ) ;
252
+ // 代替ポートの検索
253
+ const altPort = await findAltPort ( engineHostInfo ) ;
252
254
253
255
// 代替ポートが見つからないとき
254
- if ( ! altPort ) {
256
+ if ( altPort == undefined ) {
255
257
log . error ( `ENGINE ${ engineId } : No Alternative Port Found` ) ;
256
258
dialog . showErrorBox (
257
259
`${ engineInfo . name } の起動に失敗しました` ,
258
- `${ engineInfoUrl . port } 番ポートの代わりに利用可能なポートが見つかりませんでした。PCを再起動してください。`
260
+ `${ engineHostInfo . port } 番ポートの代わりに利用可能なポートが見つかりませんでした。PCを再起動してください。`
259
261
) ;
260
262
app . exit ( 1 ) ;
261
263
throw new Error ( "No Alternative Port Found" ) ;
262
264
}
263
265
264
266
// 代替ポートの情報
265
267
this . altPortInfo [ engineId ] = {
266
- from : parseInt ( engineInfoUrl . port ) ,
268
+ from : engineHostInfo . port ,
267
269
to : altPort ,
268
270
} ;
269
271
270
272
// 代替ポートを設定
271
- engineInfo . host = `http: //${ engineInfoUrl . hostname } :${ altPort } ` ;
273
+ engineInfo . host = `${ engineHostInfo . protocol } //${ engineHostInfo . hostname } :${ altPort } ` ;
272
274
log . warn (
273
- `ENGINE ${ engineId } : Applied Alternative Port: ${ engineInfoUrl . port } -> ${ altPort } `
275
+ `ENGINE ${ engineId } : Applied Alternative Port: ${ engineHostInfo . port } -> ${ altPort } `
274
276
) ;
275
277
}
276
278
0 commit comments