import type ProcessImpl from './ProcessImpl.ts' import { ProcessInfoImpl } from '@/core/process/impl/ProcessInfoImpl.ts' import { BasicSystemProcessInfo } from '@/core/system/BasicSystemProcessInfo.ts' import { DesktopProcessInfo } from '@/core/desktop/DesktopProcessInfo.ts' import type { IAppProcessInfoParams } from '@/core/process/types/IAppProcessInfoParams.ts' import type { IProcessManager } from '@/core/process/IProcessManager.ts' import type { IProcess } from '@/core/process/IProcess.ts' import type { IProcessInfo } from '@/core/process/IProcessInfo.ts' /** * 进程管理 */ export default class ProcessManagerImpl implements IProcessManager { private _processPool: Map = new Map(); private _processInfos: IProcessInfo[] = new Array(); public get processInfos() { return this._processInfos; } constructor() { console.log('ProcessManageImpl') this.loadAppProcessInfos(); } // TODO 加载所有进程信息 private loadAppProcessInfos() { console.log('加载所有进程信息') // 添加内置进程 const apps = import.meta.glob('../../apps/**/*.json', { eager: true }) const internalProcessInfos: ProcessInfoImpl[] = Object.values(apps).map(data => new ProcessInfoImpl(data)) this._processInfos.push(BasicSystemProcessInfo) this._processInfos.push(DesktopProcessInfo) this._processInfos.push(...internalProcessInfos) } // 添加进程 public registerProcess(process: ProcessImpl) { this._processPool.set(process.id, process); } /** * 通过进程id查找进程 * @param id 进程id */ public findProcessById(id: string) { return this._processPool.get(id); } /** * 通过进程名称查找进程 * @param name 进程名称 */ public findProcessByName(name: string) { const pools = [...this._processPool.values()]; return pools.find(proc => proc.processInfo.name === name) as T | undefined; } /** * 根据进程id删除进程 * @param id 进程id */ public removeProcess(id: string): void; /** * 根据进程删除进程 * @param process 进程信息 */ public removeProcess(process: IProcess): void; public removeProcess(params: string | IProcess) { const id = typeof params === 'string' ? params : params.id; this._processPool.delete(id); } /** * 通过进程名称查找进程信息 */ public findProcessInfoByName(name: string) { return this._processInfos.find(info => info.name === name); } }