// src/main.ts import { app, BrowserWindow, ipcMain } from 'electron'; import * as path from 'path'; import { WebSocketServer } from 'ws'; let server: WebSocketServer | null = null; let port = 8080; // 默认端口 function createWindow() { const win = new BrowserWindow({ width: 800, height: 600, webPreferences: { preload: path.join(__dirname, 'preload.js'), contextIsolation: true, nodeIntegration: false, // contextIsolation: false, // 使渲染進程能夠使用 Node.js // nodeIntegration: true, // 使渲染進程可以使用 Node.js 模組 }, }); win.loadFile(path.join(__dirname, 'index.html')); win.webContents.openDevTools(); return win; } let mainWindow: BrowserWindow | null = null; app.whenReady().then(() => { mainWindow = createWindow(); app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow(); } }); }); app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit(); } }); // 启动 WebSocket 服务器 ipcMain.on('start-websocket', (event, portNumber: number) => { if (server) { server.close(); } port = portNumber || 8080; server = new WebSocketServer({ port: port }); server.on('connection', (socket) => { console.log(`WebSocket server started on port ${port}`); socket.send('Welcome to the WebSocket server'); socket.on('message', (message: string) => { console.log(`Received message: ${message}`); socket.send(`Server received your message: ${message}`); }); socket.on('close', () => { console.log('Client disconnected'); }); }); event.reply('websocket-status', `WebSocket server started on port ${port} 88`); }); // 关闭 WebSocket 服务器 ipcMain.on('stop-websocket', (event) => { if (server) { server.clients.forEach(client => { if (client.readyState === 1) { client.close(); } }); server.close((err) => { if (err) { event.reply('websocket-status', 'Failed to stop WebSocket server'); } else { event.reply('websocket-status', 'WebSocket server stopped'); } }); } else { event.reply('websocket-status', 'No WebSocket server is running'); } }); // 打开开发者工具 ipcMain.on('open-devtools', () => { mainWindow.webContents.openDevTools(); });