change order of operations, add originalContext param to SideEffects
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { Machine, State, On, SideEffect, Goto, Spawn, Unspawn, Interpreter, Interpreter_T, send, Event_T } from '../index';
|
||||
import { Machine, State, On, SideEffect, Goto, Interpreter, send, SideEffectFunction_T } from '../index';
|
||||
|
||||
const beginTimer = (ctx:C, e:Event_T, self:Interpreter_T)=>{ setTimeout(()=>{ send(self, ['timer-finished',null]); }, 800); };
|
||||
const log = (ctx:C, e:Event_T, self:Interpreter_T)=>{ console.log(self.state); };
|
||||
const beginTimer : SideEffectFunction_T<C> = (ctx, e, self)=>{ setTimeout(()=>{ send(self, ['timer-finished',null]); }, 800); };
|
||||
const log : SideEffectFunction_T<C> = (ctx, e, self)=>{ console.log(self.state); };
|
||||
|
||||
type S =
|
||||
| 'green'
|
||||
@@ -43,4 +43,4 @@ const machine =
|
||||
),
|
||||
);
|
||||
|
||||
const actor = Interpreter(machine, {context:{}});
|
||||
const actor = Interpreter<C>(machine, {context:{}});
|
||||
+29
-20
@@ -1,15 +1,24 @@
|
||||
import { Machine, State, On, SideEffect, Goto, Spawn, Unspawn, Interpreter, Interpreter_T, send, Event_T, Context } from '../index';
|
||||
import { Machine, State, On, SideEffect, Goto, Spawn, Unspawn, Interpreter, Interpreter_T, send, Event_T, Context, SideEffectFunction_T } from '../index';
|
||||
|
||||
const wait = (ms:number)=>new Promise((resolve)=>{ setTimeout(()=>{ resolve(1); }, ms); });
|
||||
const makeRequest = (ctx,e,self)=>{ send(ctx.serverActor, ['received-request',self]); };
|
||||
const sendResponse = (ctx,e,self)=>{ send(ctx.clientActor, ['received-response',self]); };
|
||||
const startTimer = async (ctx,e,self)=>{ await wait(1500); send(self, ['timer-finished',null]); }
|
||||
const log = (ctx, e, self:Interpreter_T)=>{ console.log(self.state, ctx); };
|
||||
const makeRequest : SideEffectFunction_T<Cc> = (ctx,e,self)=>{ send(ctx.serverActor, ['received-request',self]); };
|
||||
const sendResponse : SideEffectFunction_T<Cs> = (ctx,e,self)=>{ send(ctx.clientActor, ['received-response',self]); };
|
||||
const startTimer : SideEffectFunction_T<Cs> = async (ctx,e,self)=>{ await wait(1500); send(self, ['timer-finished',null]); }
|
||||
const log : SideEffectFunction_T<Cc|Cs> = (ctx, e, self)=>{ console.log(self.state, ctx); };
|
||||
|
||||
type Cc = {
|
||||
requestsMade: number;
|
||||
responsesReceived: number;
|
||||
serverActor: Interpreter_T<Cs>;
|
||||
};
|
||||
type Cs = {
|
||||
clientActor: Interpreter_T<Cc>
|
||||
};
|
||||
|
||||
const client =
|
||||
Machine(
|
||||
State('idle',
|
||||
On('entry',
|
||||
Machine<Cc>(
|
||||
State<Cc>('idle',
|
||||
On<Cc>('entry',
|
||||
SideEffect(log),
|
||||
),
|
||||
On('server-created',
|
||||
@@ -17,30 +26,30 @@ const client =
|
||||
Goto('making-request')
|
||||
)
|
||||
),
|
||||
State('making-request',
|
||||
On('entry',
|
||||
State<Cc>('making-request',
|
||||
On<Cc>('entry',
|
||||
SideEffect(log),
|
||||
SideEffect(makeRequest),
|
||||
Context((ctx)=>({...ctx, requestsMade: ctx.requestsMade+1})),
|
||||
Context<Cc>((ctx)=>({...ctx, requestsMade: ctx.requestsMade+1})),
|
||||
Goto('awaiting-response')
|
||||
),
|
||||
),
|
||||
State('awaiting-response',
|
||||
On('entry',
|
||||
State<Cc>('awaiting-response',
|
||||
On<Cc>('entry',
|
||||
SideEffect(log),
|
||||
),
|
||||
On('received-response',
|
||||
On<Cc>('received-response',
|
||||
SideEffect(log),
|
||||
Context((ctx)=>({...ctx, responsesReceived: ctx.responsesReceived+1})),
|
||||
Context<Cc>((ctx)=>({...ctx, responsesReceived: ctx.responsesReceived+1})),
|
||||
Goto('making-request')
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
const server =
|
||||
Machine(
|
||||
State('awaiting-request',
|
||||
On('entry',
|
||||
Machine<Cs>(
|
||||
State<Cs>('awaiting-request',
|
||||
On<Cs>('entry',
|
||||
SideEffect(log),
|
||||
),
|
||||
On('received-request',
|
||||
@@ -48,8 +57,8 @@ const server =
|
||||
Goto('sending-response')
|
||||
),
|
||||
),
|
||||
State('sending-response',
|
||||
On('entry',
|
||||
State<Cs>('sending-response',
|
||||
On<Cs>('entry',
|
||||
SideEffect(log),
|
||||
SideEffect(startTimer)
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user