@@ -35,6 +35,9 @@ export const fromWorkerfiedActor = (
3535 worker : Worker
3636) : WorkerActorLogic < EventObject , WorkerInput > => ( {
3737 config : Worker ,
38+
39+
40+
3841
3942 start : ( state , actorScope ) => {
4043 const { self, system } = actorScope ;
@@ -46,22 +49,39 @@ export const fromWorkerfiedActor = (
4649 } ;
4750
4851 worker . addEventListener ( 'message' , ( event ) => {
49- const eventFromWorker = event . data as AnyEventObject ;
50- if ( eventFromWorker . type == 'STATE_SNAPSHOT' ) {
52+ console . log ( 'Message received from worker --> ' , event , event . data . type == WORKER_EVENTS . PROXY_EVENT , WORKER_EVENTS . PROXY_EVENT ) ;
53+ const eventPayload = event . data ;
54+ if ( eventPayload . type === WORKER_EVENTS . STATE_SNAPSHOT ) {
55+ const eventFromWorker = eventPayload as STATE_SNAPSHOT_EVENT ;
5156 self . send ( eventFromWorker ) ;
5257 return state ;
5358 }
5459
55- if ( event . type === WORKER_EVENTS . PROXY_EVENT ) {
56- const proxyEvent = event as ProxyEvent ;
57- if ( proxyEvent . data . to === 'parent' && self . _parent ) {
60+ if ( eventPayload . type === WORKER_EVENTS . PROXY_EVENT ) {
61+
62+ const proxyEvent = eventPayload as ProxyEvent ;
63+ const targetActorId = proxyEvent . data . to ;
64+ const targetEvent = proxyEvent . data . event ;
65+ const isToParent = targetActorId === 'parent' ;
66+ console . log ( 'Proxy event received from worker to' , targetActorId , targetEvent , isToParent ) ;
67+
68+
69+ if ( isToParent && self . _parent ) {
5870 console . log ( 'Relaying to parent' , proxyEvent . data ) ;
5971 self . _parent . send ( proxyEvent . data . event ) ;
6072 return state ;
6173 }
74+ if ( ! isToParent ) {
75+ const targetActor = system . get ( proxyEvent . data . to ) ;
76+ console . log ( 'Relaying to system actor' , proxyEvent . data , targetActor , system , self ) ;
77+ if ( targetActor ) {
78+ targetActor . send ( proxyEvent . data . event ) ;
79+ }
80+ return state ;
81+ }
82+
83+
6284
63- system . get ( proxyEvent . data . to ) . send ( proxyEvent . data . event ) ;
64- return state ;
6585 }
6686 } ) ;
6787
@@ -70,6 +90,8 @@ export const fromWorkerfiedActor = (
7090 transition : ( state , event , actorScope ) => {
7191 const { self } = actorScope ;
7292 const workerState = instanceStates . get ( self ) ;
93+ console . log ( 'fromWorkerActor transition' , state , event , actorScope ) ;
94+
7395 if ( event . type === 'xstate.stop' ) {
7496 console . log ( 'Stopping fromWorkerActor...' , state , event , actorScope ) ;
7597 workerState . worker . postMessage ( workerCommands . stopActor ( ) ) ;
@@ -80,6 +102,9 @@ export const fromWorkerfiedActor = (
80102 error : undefined
81103 } ;
82104 }
105+
106+
107+
83108 if ( event . type == WORKER_EVENTS . STATE_SNAPSHOT ) {
84109 const snapshot = ( event as STATE_SNAPSHOT_EVENT ) . data . snapshot as AnyMachineSnapshot ;
85110 return {
0 commit comments