Skip to content

Instantly share code, notes, and snippets.

@awchjimmy
Last active April 16, 2020 09:14
Show Gist options
  • Save awchjimmy/ff640a1951d4c4b7dc28d5f691fdb2b7 to your computer and use it in GitHub Desktop.
Save awchjimmy/ff640a1951d4c4b7dc28d5f691fdb2b7 to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
// 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