delay execute till after stream ready (#143)
This commit is contained in:
20
src/App.tsx
20
src/App.tsx
@ -29,14 +29,11 @@ export function App() {
|
|||||||
setEditorView,
|
setEditorView,
|
||||||
setSelectionRanges,
|
setSelectionRanges,
|
||||||
selectionRanges,
|
selectionRanges,
|
||||||
guiMode,
|
|
||||||
lastGuiMode,
|
|
||||||
addLog,
|
addLog,
|
||||||
code,
|
code,
|
||||||
setCode,
|
setCode,
|
||||||
setAst,
|
setAst,
|
||||||
setError,
|
setError,
|
||||||
errorState,
|
|
||||||
setProgramMemory,
|
setProgramMemory,
|
||||||
resetLogs,
|
resetLogs,
|
||||||
selectionRangeTypeMap,
|
selectionRangeTypeMap,
|
||||||
@ -47,20 +44,19 @@ export function App() {
|
|||||||
setCursor2,
|
setCursor2,
|
||||||
sourceRangeMap,
|
sourceRangeMap,
|
||||||
setMediaStream,
|
setMediaStream,
|
||||||
|
setIsStreamReady,
|
||||||
|
isStreamReady,
|
||||||
} = useStore((s) => ({
|
} = useStore((s) => ({
|
||||||
editorView: s.editorView,
|
editorView: s.editorView,
|
||||||
setEditorView: s.setEditorView,
|
setEditorView: s.setEditorView,
|
||||||
setSelectionRanges: s.setSelectionRanges,
|
setSelectionRanges: s.setSelectionRanges,
|
||||||
selectionRanges: s.selectionRanges,
|
selectionRanges: s.selectionRanges,
|
||||||
guiMode: s.guiMode,
|
|
||||||
setGuiMode: s.setGuiMode,
|
setGuiMode: s.setGuiMode,
|
||||||
addLog: s.addLog,
|
addLog: s.addLog,
|
||||||
code: s.code,
|
code: s.code,
|
||||||
setCode: s.setCode,
|
setCode: s.setCode,
|
||||||
setAst: s.setAst,
|
setAst: s.setAst,
|
||||||
lastGuiMode: s.lastGuiMode,
|
|
||||||
setError: s.setError,
|
setError: s.setError,
|
||||||
errorState: s.errorState,
|
|
||||||
setProgramMemory: s.setProgramMemory,
|
setProgramMemory: s.setProgramMemory,
|
||||||
resetLogs: s.resetLogs,
|
resetLogs: s.resetLogs,
|
||||||
selectionRangeTypeMap: s.selectionRangeTypeMap,
|
selectionRangeTypeMap: s.selectionRangeTypeMap,
|
||||||
@ -72,7 +68,9 @@ export function App() {
|
|||||||
setCursor: s.setCursor,
|
setCursor: s.setCursor,
|
||||||
setCursor2: s.setCursor2,
|
setCursor2: s.setCursor2,
|
||||||
sourceRangeMap: s.sourceRangeMap,
|
sourceRangeMap: s.sourceRangeMap,
|
||||||
setMediaStream: s.setMediaStream
|
setMediaStream: s.setMediaStream,
|
||||||
|
isStreamReady: s.isStreamReady,
|
||||||
|
setIsStreamReady: s.setIsStreamReady,
|
||||||
}))
|
}))
|
||||||
// const onChange = React.useCallback((value: string, viewUpdate: ViewUpdate) => {
|
// const onChange = React.useCallback((value: string, viewUpdate: ViewUpdate) => {
|
||||||
const onChange = (value: string, viewUpdate: ViewUpdate) => {
|
const onChange = (value: string, viewUpdate: ViewUpdate) => {
|
||||||
@ -137,7 +135,10 @@ export function App() {
|
|||||||
codeBasedSelections,
|
codeBasedSelections,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const engineCommandManager = useMemo(() => new EngineCommandManager(setMediaStream), [])
|
const engineCommandManager = useMemo(() => new EngineCommandManager({
|
||||||
|
setMediaStream,
|
||||||
|
setIsStreamReady,
|
||||||
|
}), [])
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
return () => {
|
return () => {
|
||||||
engineCommandManager.tearDown()
|
engineCommandManager.tearDown()
|
||||||
@ -145,6 +146,7 @@ export function App() {
|
|||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
if (!isStreamReady) return
|
||||||
const asyncWrap = async () => {
|
const asyncWrap = async () => {
|
||||||
try {
|
try {
|
||||||
if (!code) {
|
if (!code) {
|
||||||
@ -242,7 +244,7 @@ export function App() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
asyncWrap()
|
asyncWrap()
|
||||||
}, [code])
|
}, [code, isStreamReady])
|
||||||
return (
|
return (
|
||||||
<div className="h-screen">
|
<div className="h-screen">
|
||||||
<ModalContainer />
|
<ModalContainer />
|
||||||
|
@ -90,7 +90,13 @@ export class EngineCommandManager {
|
|||||||
onClickCallback: (selection: SelectionsArgs) => void = () => {}
|
onClickCallback: (selection: SelectionsArgs) => void = () => {}
|
||||||
onCursorsSelectedCallback: (selections: CursorSelectionsArgs) => void =
|
onCursorsSelectedCallback: (selections: CursorSelectionsArgs) => void =
|
||||||
() => {}
|
() => {}
|
||||||
constructor(setMediaStream: (stream: MediaStream) => void) {
|
constructor({
|
||||||
|
setMediaStream,
|
||||||
|
setIsStreamReady,
|
||||||
|
}: {
|
||||||
|
setMediaStream: (stream: MediaStream) => void
|
||||||
|
setIsStreamReady: (isStreamReady: boolean) => void
|
||||||
|
}) {
|
||||||
const url = 'wss://api.dev.kittycad.io/ws/modeling/commands'
|
const url = 'wss://api.dev.kittycad.io/ws/modeling/commands'
|
||||||
this.socket = new WebSocket(url)
|
this.socket = new WebSocket(url)
|
||||||
this.pc = new RTCPeerConnection()
|
this.pc = new RTCPeerConnection()
|
||||||
@ -178,6 +184,7 @@ export class EngineCommandManager {
|
|||||||
this.lossyDataChannel = event.channel
|
this.lossyDataChannel = event.channel
|
||||||
console.log('accepted lossy data channel', event.channel.label)
|
console.log('accepted lossy data channel', event.channel.label)
|
||||||
this.lossyDataChannel.addEventListener('open', (event) => {
|
this.lossyDataChannel.addEventListener('open', (event) => {
|
||||||
|
setIsStreamReady(true)
|
||||||
console.log('lossy data channel opened', event)
|
console.log('lossy data channel opened', event)
|
||||||
})
|
})
|
||||||
this.lossyDataChannel.addEventListener('close', (event) => {
|
this.lossyDataChannel.addEventListener('close', (event) => {
|
||||||
|
@ -47,7 +47,7 @@ export const extrude: InternalFn = (
|
|||||||
target: sketch.id,
|
target: sketch.id,
|
||||||
distance: length,
|
distance: length,
|
||||||
cap: true,
|
cap: true,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
cmd_id: id,
|
cmd_id: id,
|
||||||
file_id: uuidv4(),
|
file_id: uuidv4(),
|
||||||
|
@ -293,7 +293,7 @@ export const line: SketchLineHelper = {
|
|||||||
},
|
},
|
||||||
cmd_id: id,
|
cmd_id: id,
|
||||||
file_id: uuidv4(),
|
file_id: uuidv4(),
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
const currentPath: Path = {
|
const currentPath: Path = {
|
||||||
type: 'toPoint',
|
type: 'toPoint',
|
||||||
@ -1603,7 +1603,7 @@ export const close: InternalFn = (
|
|||||||
},
|
},
|
||||||
cmd_id: id,
|
cmd_id: id,
|
||||||
file_id: uuidv4(),
|
file_id: uuidv4(),
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const currentPath: Path = {
|
const currentPath: Path = {
|
||||||
|
@ -6,7 +6,10 @@ export async function executor(
|
|||||||
ast: Program,
|
ast: Program,
|
||||||
pm: ProgramMemory = { root: {}, pendingMemory: {} }
|
pm: ProgramMemory = { root: {}, pendingMemory: {} }
|
||||||
): Promise<ProgramMemory> {
|
): Promise<ProgramMemory> {
|
||||||
const engineCommandManager = new EngineCommandManager(() => {})
|
const engineCommandManager = new EngineCommandManager({
|
||||||
|
setIsStreamReady: () => {},
|
||||||
|
setMediaStream: () => {},
|
||||||
|
})
|
||||||
engineCommandManager.startNewSession()
|
engineCommandManager.startNewSession()
|
||||||
const programMemory = await _executor(ast, pm, engineCommandManager)
|
const programMemory = await _executor(ast, pm, engineCommandManager)
|
||||||
await engineCommandManager.waitForAllCommands()
|
await engineCommandManager.waitForAllCommands()
|
||||||
|
@ -148,6 +148,8 @@ export interface StoreState {
|
|||||||
setEngineCommandManager: (engineCommandManager: EngineCommandManager) => void
|
setEngineCommandManager: (engineCommandManager: EngineCommandManager) => void
|
||||||
mediaStream?: MediaStream
|
mediaStream?: MediaStream
|
||||||
setMediaStream: (mediaStream: MediaStream) => void
|
setMediaStream: (mediaStream: MediaStream) => void
|
||||||
|
isStreamReady: boolean
|
||||||
|
setIsStreamReady: (isStreamReady: boolean) => void
|
||||||
|
|
||||||
// tauri specific app settings
|
// tauri specific app settings
|
||||||
defaultDir: DefaultDir
|
defaultDir: DefaultDir
|
||||||
@ -300,6 +302,8 @@ export const useStore = create<StoreState>()(
|
|||||||
setEngineCommandManager: (engineCommandManager) =>
|
setEngineCommandManager: (engineCommandManager) =>
|
||||||
set({ engineCommandManager }),
|
set({ engineCommandManager }),
|
||||||
setMediaStream: (mediaStream) => set({ mediaStream }),
|
setMediaStream: (mediaStream) => set({ mediaStream }),
|
||||||
|
isStreamReady: false,
|
||||||
|
setIsStreamReady: (isStreamReady) => set({ isStreamReady }),
|
||||||
|
|
||||||
// tauri specific app settings
|
// tauri specific app settings
|
||||||
defaultDir: {
|
defaultDir: {
|
||||||
|
Reference in New Issue
Block a user