Skip to content

Commit c3ee136

Browse files
committed
rename message
1 parent 31f155a commit c3ee136

File tree

2 files changed

+61
-37
lines changed

2 files changed

+61
-37
lines changed

packages/emnapi/src/core/async.ts

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,36 +9,48 @@ function __emnapi_worker_unref (pid: number): void {
99
// }
1010
}
1111

12-
function emnapiAddSendListener (worker: any): void {
13-
if (worker && !worker._emnapiSendListener) {
14-
worker._emnapiSendListener = function _emnapiSendListener (e: any) {
15-
const data = ENVIRONMENT_IS_NODE ? e : e.data
16-
if (data.emnapiAsyncSend) {
17-
if (ENVIRONMENT_IS_PTHREAD) {
18-
postMessage({
19-
emnapiAsyncSend: data.emnapiAsyncSend
20-
})
21-
} else {
22-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
23-
const callback = data.emnapiAsyncSend.callback
24-
$makeDynCall('vp', 'callback')(data.emnapiAsyncSend.data)
25-
}
12+
function emnapiAddSendListener (worker: any): boolean {
13+
if (!worker) return false
14+
if (worker._emnapiSendListener) return true
15+
const handler = function (e: any): void {
16+
const data = ENVIRONMENT_IS_NODE ? e : e.data
17+
const __emnapi__ = data.__emnapi__
18+
if (__emnapi__ && __emnapi__.type === 'async-send') {
19+
if (ENVIRONMENT_IS_PTHREAD) {
20+
postMessage({ __emnapi__ })
21+
} else {
22+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
23+
const callback = __emnapi__.payload.callback
24+
$makeDynCall('vp', 'callback')(__emnapi__.payload.data)
2625
}
2726
}
27+
}
28+
const dispose = function (): void {
2829
if (ENVIRONMENT_IS_NODE) {
29-
worker.on('message', worker._emnapiSendListener)
30+
worker.off('message', handler)
3031
} else {
31-
worker.addEventListener('message', worker._emnapiSendListener, false)
32+
worker.removeEventListener('message', handler, false)
3233
}
34+
delete worker._emnapiSendListener
3335
}
36+
worker._emnapiSendListener = { handler, dispose }
37+
if (ENVIRONMENT_IS_NODE) {
38+
worker.on('message', handler)
39+
} else {
40+
worker.addEventListener('message', handler, false)
41+
}
42+
return true
3443
}
3544

3645
function __emnapi_async_send_js (type: number, callback: number, data: number): void {
3746
if (ENVIRONMENT_IS_PTHREAD) {
3847
postMessage({
39-
emnapiAsyncSend: {
40-
callback,
41-
data
48+
__emnapi__: {
49+
type: 'async-send',
50+
payload: {
51+
callback,
52+
data
53+
}
4254
}
4355
})
4456
} else {

packages/emnapi/src/emscripten/async.ts

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,27 +23,36 @@ mergeInto(LibraryManager.library, {
2323
'return r;' +
2424
'}; })();',
2525
$emnapiAddSendListener: function (worker: any) {
26-
if (worker && !worker._emnapiSendListener) {
27-
worker._emnapiSendListener = function _emnapiSendListener (e: any) {
28-
const data = ENVIRONMENT_IS_NODE ? e : e.data
29-
if (data.emnapiAsyncSend) {
30-
if (ENVIRONMENT_IS_PTHREAD) {
31-
postMessage({
32-
emnapiAsyncSend: data.emnapiAsyncSend
33-
})
34-
} else {
35-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
36-
const callback = data.emnapiAsyncSend.callback
37-
$makeDynCall('vp', 'callback')(data.emnapiAsyncSend.data)
38-
}
26+
if (!worker) return false
27+
if (worker._emnapiSendListener) return true
28+
const handler = function (e: any): void {
29+
const data = ENVIRONMENT_IS_NODE ? e : e.data
30+
const __emnapi__ = data.__emnapi__
31+
if (__emnapi__ && __emnapi__.type === 'async-send') {
32+
if (ENVIRONMENT_IS_PTHREAD) {
33+
postMessage({ __emnapi__ })
34+
} else {
35+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
36+
const callback = __emnapi__.payload.callback
37+
$makeDynCall('vp', 'callback')(__emnapi__.payload.data)
3938
}
4039
}
40+
}
41+
const dispose = function (): void {
4142
if (ENVIRONMENT_IS_NODE) {
42-
worker.on('message', worker._emnapiSendListener)
43+
worker.off('message', handler)
4344
} else {
44-
worker.addEventListener('message', worker._emnapiSendListener, false)
45+
worker.removeEventListener('message', handler, false)
4546
}
47+
delete worker._emnapiSendListener
4648
}
49+
worker._emnapiSendListener = { handler, dispose }
50+
if (ENVIRONMENT_IS_NODE) {
51+
worker.on('message', handler)
52+
} else {
53+
worker.addEventListener('message', handler, false)
54+
}
55+
return true
4756
},
4857

4958
_emnapi_async_send_js__sig: 'vipp',
@@ -55,9 +64,12 @@ mergeInto(LibraryManager.library, {
5564
_emnapi_async_send_js: function (type: number, callback: number, data: number): void {
5665
if (ENVIRONMENT_IS_PTHREAD) {
5766
postMessage({
58-
emnapiAsyncSend: {
59-
callback,
60-
data
67+
__emnapi__: {
68+
type: 'async-send',
69+
payload: {
70+
callback,
71+
data
72+
}
6173
}
6274
})
6375
} else {

0 commit comments

Comments
 (0)