Last active
April 16, 2020 09:14
-
-
Save awchjimmy/ff640a1951d4c4b7dc28d5f691fdb2b7 to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Available variables: | |
// - Machine | |
// - interpret | |
// - assign | |
// - send | |
// - sendParent | |
// - spawn | |
// - raise | |
// - actions | |
// - XState (all XState exports) | |
const allDoneGuard = (context) => { | |
return false; | |
} | |
const graphicsCheck = { | |
id: '字幕測試階段', | |
initial: 'NDI 連接', | |
type: 'parallel', | |
states: { | |
'NDI 連接': { | |
on: { | |
'切換成 [異常]': { | |
target: 'NDI 連接', | |
cond: context => context.NDIConnStatus === 'WORKING', | |
actions: [ | |
assign({ | |
NDIConnStatus: 'NOT_WORKING' | |
}) | |
] | |
}, | |
'切換成 [正常]': { | |
target: 'NDI 連接', | |
cond: context => context.NDIConnStatus === 'NOT_WORKING', | |
actions: [ | |
assign({ | |
NDIConnStatus: 'WORKING' | |
}) | |
] | |
}, | |
} | |
} | |
} | |
} | |
const audioCheck = { | |
id: '音控測試階段', | |
initial: 'ATEM 連接', | |
type: 'parallel', | |
states: { | |
'ATEM 連接': { | |
on: { | |
'0x86 切換成 [異常]': { | |
target: 'ATEM 連接', | |
cond: context => context.ATEMConnStatus === 'WORKING', | |
actions: [assign({ | |
ATEMConnStatus: 'NOT_WORKING' | |
})] | |
}, | |
'0x87 切換成 [正常]': { | |
target: 'ATEM 連接', | |
cond: context => context.ATEMConnStatus === 'NOT_WORKING', | |
actions: [assign({ | |
ATEMConnStatus: 'WORKING' | |
})] | |
}, | |
} | |
}, | |
'播影片 聲音': { | |
on: { | |
'0x88 切換成 [異常]': { | |
target: '播影片 聲音', | |
cond: (context) => context.VideoPlaybackAudio === 'WORKING', | |
actions: [assign({VideoPlaybackAudio: 'NOT_WORKING'})] | |
}, | |
'0x89 切換成 [正常]': { | |
target: '播影片 聲音', | |
cond: (context) => context.VideoPlaybackAudio === 'NOT_WORKING', | |
actions: [assign({ | |
VideoPlaybackAudio: 'WORKING' | |
})] | |
}, | |
} | |
} | |
} | |
} | |
const fetchMachine = Machine({ | |
id: '主日直播', | |
initial: 'idle', | |
context: { | |
ATEMConnStatus: 'NOT_WORKING', | |
NDIConnStatus: 'NOT_WORKING', | |
VideoPlaybackVideo: 'NOT_WORKING', | |
VideoPlaybackAudio: 'NOT_WORKING', | |
}, | |
states: { | |
idle: { | |
on: { | |
'硬體架設': '硬體完成後測試' | |
} | |
}, | |
'硬體完成後測試': { | |
on: { | |
'音控測試': '音控測試階段', | |
'字幕測試': '字幕測試階段', | |
'攝影測試': 'failure', | |
'直播測試': 'failure', | |
'全部完成': { | |
target: '開始直播', | |
cond: allDoneGuard, | |
}, | |
} | |
}, | |
'字幕測試階段': { | |
...graphicsCheck, | |
onDone: '硬體完成後測試' | |
}, | |
'音控測試階段': { | |
...audioCheck, | |
onDone: '硬體完成後測試' | |
}, | |
failure: { | |
on: { | |
RETRY: { | |
target: '硬體完成後測試', | |
actions: assign({ | |
retries: (context, event) => context.retries + 1 | |
}) | |
} | |
} | |
}, | |
'開始直播': { | |
type: 'final' | |
}, | |
} | |
}); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment