Player: add message on the vm termination

This commit is contained in:
He4eT 2023-05-25 00:46:22 +03:00 committed by Alexey
commit 7a58f92434
3 changed files with 41 additions and 13 deletions

View file

@ -106,6 +106,11 @@ export default function InputBox ({
}
}
const noopHandler = (event) => {
event.target.valut = ''
event.preventDefault()
}
const inputHandlers = {
char: {
maxlength: '1',
@ -120,6 +125,11 @@ export default function InputBox ({
onKeyDown: lineArrowHandler,
onKeyPress: lineHandler,
},
finished: {
placeholder: 'The program has finished',
onKeyDown: noopHandler,
onKeyPress: noopHandler,
},
}
const enterFullscreen = () =>
@ -134,6 +144,6 @@ export default function InputBox ({
autocomplete='off'
onDblClick={enterFullscreen}
onInput={({ target: { value } }) => setInputText(value)}
type='search' />
type='text' />
)
}

View file

@ -9,7 +9,7 @@ import GridBuffer from './GridBuffer'
import InputBox from './InputBox'
import Status from './Status'
import { Handlers } from './playerHandlers'
import { Handlers, unhandledRejectionHandler } from './playerHandlers'
import './player.css'
@ -47,20 +47,29 @@ export default function Player ({
const [sendMessage, setSendMessage] = useState(null)
useEffect(() => {
const vm = runMachine({
const handlers = Handlers({
setStatus,
setWindows,
setCurrentWindowId,
setInputType,
setInbox,
})
setVm(runMachine({
engine,
wasmBinary,
storyfile,
handlers: Handlers({
setStatus,
setWindows,
setCurrentWindowId,
setInputType,
setInbox,
}),
})
handlers,
}))
setVm(vm)
const rejectionHandler =
unhandledRejectionHandler(handlers.onExit)
window.addEventListener('unhandledrejection', rejectionHandler)
return () => {
window.removeEventListener('unhandledrejection', rejectionHandler)
}
}, [storyfile, engine, wasmBinary])
useEffect(() => {

View file

@ -46,6 +46,15 @@ export const Handlers = ({
},
/* */
onExit: () => {
setInputType(null)
setInputType('finished')
},
})
export const unhandledRejectionHandler = (onExit) => (event) => {
if (event.reason.name === 'ExitStatus' || event.reason.message === 'Program terminated with exit(0)') {
onExit()
} else {
console.error('Unhandled rejection (promise: ', event.promise, ', reason: ', event.reason, ').');
}
event.preventDefault()
}