Skip to content

Commit d74e2f3

Browse files
committed
opt multi windows log
1 parent 72d54b5 commit d74e2f3

File tree

4 files changed

+24
-28
lines changed

4 files changed

+24
-28
lines changed

src/main/multiWin.ts

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,25 @@ import {
1313
import path, { join } from 'path'
1414
import icon from '../../resources/icon.png?asset'
1515

16-
ipcMain.on('ipc-get-port', (event) => {
17-
const win = BrowserWindow.fromWebContents(event.sender)
18-
if (win) {
19-
const port = logQ.portMap.get(win)
20-
if (port) {
21-
port.close()
22-
}
23-
const { port1, port2 } = new MessageChannelMain()
24-
logQ.portMap.set(win, port1)
25-
event.sender.postMessage('port', null, [port2])
26-
// port2.start()
16+
ipcMain.on('ipc-get-port', (event, id: string) => {
17+
console.log('get-port', id)
18+
19+
const port = logQ.portMap.get(id)
20+
if (port) {
21+
port.close()
22+
logQ.portMap.delete(id)
2723
}
24+
const { port1, port2 } = new MessageChannelMain()
25+
logQ.portMap.set(id, port1)
26+
event.sender.postMessage('port', null, [port2])
27+
// port2.start()
2828
})
2929
class LogQueue {
3030
private static instance: LogQueue | null = null
3131
list: any[] = []
3232
timer: any
3333
mainWin: BrowserWindow | undefined
34-
portMap: Map<BrowserWindow, MessagePortMain> = new Map()
34+
portMap: Map<string, MessagePortMain> = new Map()
3535

3636
private constructor(
3737
public win: BrowserWindow[] = [],
@@ -85,6 +85,7 @@ const winMap = new Map<string, BrowserWindow>()
8585
const winPosMap = new Map<string, { x: number; y: number; width: number; height: number }>()
8686

8787
ipcMain.on('ipc-open-window', (event, arg) => {
88+
console.log('open', arg.id)
8889
if (winMap.has(arg.id)) {
8990
winMap.get(arg.id)?.show()
9091
} else {
@@ -152,9 +153,10 @@ export function closeAllWindows() {
152153
height: pos?.height
153154
})
154155
win.close()
155-
const port = logQ.portMap.get(win)
156+
const port = logQ.portMap.get(key)
156157
if (port) {
157158
port.close()
159+
logQ.portMap.delete(key)
158160
}
159161
})
160162
}
@@ -171,9 +173,10 @@ export function closeWindow(id: string) {
171173
height: pos?.height
172174
})
173175
win.close()
174-
const port = logQ.portMap.get(win)
176+
const port = logQ.portMap.get(id)
175177
if (port) {
176178
port.close()
179+
logQ.portMap.delete(id)
177180
}
178181
}
179182
}

src/preload/api.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ export type Api = {
77
writeFile: (path: string, data: string) => Promise<void>
88
readdir: (path: string) => Promise<Dirent[]>
99
state: (path: string) => Promise<Stats>
10-
getPort: () => void
10+
getPort: (id: string) => void
1111
}

src/preload/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@ path.relative = (from: string, to: string) => {
2121
return ipcRenderer.sendSync('ipc-path-relative', from, to)
2222
}
2323

24-
const getPort = (): void => {
24+
const getPort = (id: string): void => {
2525
ipcRenderer.once('port', (event, ports) => {
2626
const portCache = event.ports?.[0]
2727
if (portCache) {
2828
window.postMessage('port', '*', [portCache])
2929
}
3030
})
31-
ipcRenderer.send('ipc-get-port')
31+
ipcRenderer.send('ipc-get-port', id)
3232
}
3333

3434
// Custom APIs for renderer

src/renderer/src/main.ts

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import { useRuntimeStore } from './stores/runtime'
3434
import { assign, cloneDeep } from 'lodash'
3535
import wujieVue from 'wujie-vue3'
3636

37-
const channel = new BroadcastChannel('ipc-log')
37+
// const channel = new BroadcastChannel('ipc-log')
3838
const dataChannel = new BroadcastChannel('ipc-data')
3939
const projectChannel = new BroadcastChannel('ipc-project')
4040
const runtimeChannel = new BroadcastChannel('ipc-runtime')
@@ -45,9 +45,6 @@ window.logBus = mitt()
4545
window.dataParseWorker = dataParseWorker
4646
dataParseWorker.onmessage = (event) => {
4747
//main tab
48-
if (window.params.id == undefined && Layout.externWinNum > 0) {
49-
channel.postMessage(event.data)
50-
}
5148
for (const key of Object.keys(event.data)) {
5249
window.logBus.emit(key, { key, values: event.data[key] })
5350
}
@@ -69,7 +66,7 @@ window.onmessage = (event) => {
6966
)
7067
}
7168
}
72-
window.api.getPort()
69+
7370
VxeUI.use(VxeUIPluginRenderElement)
7471
VxeUI.setI18n('en-US', enUS)
7572
VxeUI.setLanguage('en-US')
@@ -109,15 +106,11 @@ window.params = {}
109106
urlParams.forEach((value, key) => {
110107
window.params[key] = value
111108
})
112-
109+
window.api.getPort(window.params.id || 'main')
113110
//单向的
114111
if (window.params.id) {
115112
router.push(`/${window.params.path}`)
116-
channel.onmessage = (event) => {
117-
for (const key of Object.keys(event.data)) {
118-
window.logBus.emit(key, { key, values: event.data[key] })
119-
}
120-
}
113+
121114
dataChannel.onmessage = (event) => {
122115
dataStore.$patch((state) => {
123116
assign(state, event.data)

0 commit comments

Comments
 (0)