93 lines
2.6 KiB
TypeScript

import { app, BrowserWindow, ipcMain } from 'electron';
import * as OpenMCPService from '../resources/service';
import * as path from 'path';
import { ElectronIPCLike, getInitConnectionOption, ILaunchSigature, updateConnectionOption } from './util';
let mainWindow: BrowserWindow
function createWindow(): void {
mainWindow = new BrowserWindow({
height: 800,
useContentSize: true,
width: 1200,
webPreferences: {
nodeIntegration: true,
contextIsolation: true,
preload: path.join(__dirname, 'preload.js')
},
autoHideMenuBar: true,
icon: path.join(__dirname, '..', 'icons', 'icon.png')
});
const webview = new ElectronIPCLike(mainWindow.webContents);
// 先发送成功建立的消息
webview.postMessage({
command: 'hello',
data: {
version: '0.0.1',
name: '消息桥连接完成'
}
});
const option = getInitConnectionOption();
// 注册消息接受的管线
webview.onDidReceiveMessage((message: any) => {
console.info(`command: [${message.command || 'No Command'}]`);
const { command, data } = message;
switch (command) {
case 'electron/launch-signature':
const launchResultMessage: ILaunchSigature = option.type === 'stdio' ?
{
type: 'stdio',
commandString: option.command + ' ' + option.args.join(' '),
cwd: option.cwd || ''
} :
{
type: 'sse',
url: option.url,
oauth: option.oauth || ''
};
const launchResult = {
code: 200,
msg: launchResultMessage
};
webview.postMessage({
command: 'electron/launch-signature',
data: launchResult
});
break;
case 'electron/update-connection-sigature':
updateConnectionOption(data);
break;
default:
OpenMCPService.routeMessage(command, data, webview);
break;
}
});
const indexPath = path.join(__dirname, '..', 'resources/renderer/index.html');
mainWindow.loadFile(indexPath);
}
app.whenReady().then(() => {
createWindow();
app.on('activate', function () {
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
})
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') app.quit()
})