@@ -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