|
|
|
@ -440,7 +440,9 @@ class EngineConnection extends EventTarget {
|
|
|
|
|
this.tearDown = () => {}
|
|
|
|
|
this.websocket.addEventListener('open', this.onWebSocketOpen)
|
|
|
|
|
|
|
|
|
|
// Is this listener ever even used???
|
|
|
|
|
this.websocket?.addEventListener('message', ((event: MessageEvent) => {
|
|
|
|
|
console.log('ADAM: Received a message')
|
|
|
|
|
const message: Models['WebSocketResponse_type'] = JSON.parse(event.data)
|
|
|
|
|
const pending =
|
|
|
|
|
this.engineCommandManager.pendingCommands[message.request_id || '']
|
|
|
|
@ -450,6 +452,7 @@ class EngineConnection extends EventTarget {
|
|
|
|
|
|
|
|
|
|
// If there's no body to the response, we can bail here.
|
|
|
|
|
if (!resp || !resp.type) {
|
|
|
|
|
console.log('ADAM: Resolved an empty-body promise', message.request_id)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -509,6 +512,8 @@ class EngineConnection extends EventTarget {
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ADAM: Is this where resolved promises go?
|
|
|
|
|
console.log('ADAM: Resolved some promise', message.request_id)
|
|
|
|
|
pending.resolve([message])
|
|
|
|
|
delete this.engineCommandManager.pendingCommands[message.request_id || '']
|
|
|
|
|
}) as EventListener)
|
|
|
|
@ -674,7 +679,7 @@ class EngineConnection extends EventTarget {
|
|
|
|
|
|
|
|
|
|
this.onIceCandidateError = (_event: Event) => {
|
|
|
|
|
const event = _event as RTCPeerConnectionIceErrorEvent
|
|
|
|
|
console.warn(
|
|
|
|
|
console.log(
|
|
|
|
|
`ICE candidate returned an error: ${event.errorCode}: ${event.errorText} for ${event.url}`
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
@ -1022,12 +1027,18 @@ class EngineConnection extends EventTarget {
|
|
|
|
|
event.data
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
console.log('ADAM: Got msg', message.request_id, 'type', message)
|
|
|
|
|
if (!message.success) {
|
|
|
|
|
const pending =
|
|
|
|
|
this.engineCommandManager.pendingCommands[
|
|
|
|
|
message.request_id || ''
|
|
|
|
|
]
|
|
|
|
|
const errorsString = message?.errors
|
|
|
|
|
?.map((error) => {
|
|
|
|
|
return ` - ${error.error_code}: ${error.message}`
|
|
|
|
|
})
|
|
|
|
|
.join('\n')
|
|
|
|
|
pending.reject(errorsString)
|
|
|
|
|
if (message.request_id) {
|
|
|
|
|
const artifactThatFailed =
|
|
|
|
|
this.engineCommandManager.artifactGraph.get(message.request_id)
|
|
|
|
@ -1070,8 +1081,23 @@ class EngineConnection extends EventTarget {
|
|
|
|
|
|
|
|
|
|
let resp = message.resp
|
|
|
|
|
|
|
|
|
|
const pending =
|
|
|
|
|
this.engineCommandManager.pendingCommands[message.request_id || '']
|
|
|
|
|
console.log(
|
|
|
|
|
'ADAM: Successful response to ',
|
|
|
|
|
message.request_id,
|
|
|
|
|
pending
|
|
|
|
|
)
|
|
|
|
|
if (pending !== undefined) {
|
|
|
|
|
console.warn('ADAM: Resolving!')
|
|
|
|
|
pending.resolve([message])
|
|
|
|
|
pending.promise.then((p) => {
|
|
|
|
|
console.log('ADAM: Found a promise.then')
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
// If there's no body to the response, we can bail here.
|
|
|
|
|
if (!resp || !resp.type) {
|
|
|
|
|
console.log('ADAM: Bailing because empty')
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1082,6 +1108,7 @@ class EngineConnection extends EventTarget {
|
|
|
|
|
|
|
|
|
|
case 'modeling_session_data':
|
|
|
|
|
let api_call_id = resp.data?.session?.api_call_id
|
|
|
|
|
console.log('ADAM: ')
|
|
|
|
|
console.log(`API Call ID: ${api_call_id}`)
|
|
|
|
|
break
|
|
|
|
|
|
|
|
|
@ -1103,7 +1130,7 @@ class EngineConnection extends EventTarget {
|
|
|
|
|
|
|
|
|
|
// No ICE servers can be valid in a local dev. env.
|
|
|
|
|
if (ice_servers?.length === 0) {
|
|
|
|
|
console.warn('No ICE servers')
|
|
|
|
|
console.log('No ICE servers')
|
|
|
|
|
this.pc?.setConfiguration({
|
|
|
|
|
bundlePolicy: 'max-bundle',
|
|
|
|
|
})
|
|
|
|
@ -1410,7 +1437,7 @@ export class EngineCommandManager extends EventTarget {
|
|
|
|
|
height: number = 1337
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Export intent traxcks the intent of the export. If it is null there is no
|
|
|
|
|
* Export intent tracks the intent of the export. If it is null there is no
|
|
|
|
|
* export in progress. Otherwise it is an enum value of the intent.
|
|
|
|
|
* Another export cannot be started if one is already in progress.
|
|
|
|
|
*/
|
|
|
|
@ -1683,7 +1710,7 @@ export class EngineCommandManager extends EventTarget {
|
|
|
|
|
}
|
|
|
|
|
case ExportIntent.Make: {
|
|
|
|
|
if (!this.machineManager) {
|
|
|
|
|
console.warn('Some how, no manufacturing machine is selected.')
|
|
|
|
|
console.log('Some how, no manufacturing machine is selected.')
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1944,7 +1971,9 @@ export class EngineCommandManager extends EventTarget {
|
|
|
|
|
}
|
|
|
|
|
sendSceneCommand(
|
|
|
|
|
command: EngineCommand,
|
|
|
|
|
forceWebsocket = false
|
|
|
|
|
forceWebsocket = false,
|
|
|
|
|
resolveCb?: (value: any | PromiseLike<any>) => void,
|
|
|
|
|
rejectCb?: (value: any | PromiseLike<any>) => void
|
|
|
|
|
): Promise<Models['WebSocketResponse_type'] | null> {
|
|
|
|
|
if (this.engineConnection === undefined) {
|
|
|
|
|
return Promise.resolve(null)
|
|
|
|
@ -2053,7 +2082,9 @@ export class EngineCommandManager extends EventTarget {
|
|
|
|
|
idToRangeMap: {},
|
|
|
|
|
range: defaultSourceRange(),
|
|
|
|
|
},
|
|
|
|
|
true // isSceneCommand
|
|
|
|
|
true, // isSceneCommand
|
|
|
|
|
resolveCb,
|
|
|
|
|
rejectCb
|
|
|
|
|
)
|
|
|
|
|
.then(([a]) => a)
|
|
|
|
|
.catch((e) => {
|
|
|
|
@ -2111,9 +2142,16 @@ export class EngineCommandManager extends EventTarget {
|
|
|
|
|
range: PendingMessage['range']
|
|
|
|
|
idToRangeMap: PendingMessage['idToRangeMap']
|
|
|
|
|
},
|
|
|
|
|
isSceneCommand = false
|
|
|
|
|
isSceneCommand = false,
|
|
|
|
|
resolveCb?: (value: any | PromiseLike<any>) => void,
|
|
|
|
|
rejectCb?: (value: any | PromiseLike<any>) => void
|
|
|
|
|
): Promise<[Models['WebSocketResponse_type']]> {
|
|
|
|
|
const { promise, resolve, reject } = promiseFactory<any>()
|
|
|
|
|
const { promise, resolve, reject } = (() => {
|
|
|
|
|
if (resolveCb === undefined) return promiseFactory<any>()
|
|
|
|
|
if (rejectCb === undefined) return promiseFactory<any>()
|
|
|
|
|
return promiseFactoryFor(resolveCb, rejectCb)
|
|
|
|
|
})()
|
|
|
|
|
// console.log('ADAM:', resolveCb, promise)
|
|
|
|
|
this.pendingCommands[id] = {
|
|
|
|
|
resolve,
|
|
|
|
|
reject,
|
|
|
|
@ -2269,3 +2307,14 @@ function promiseFactory<T>() {
|
|
|
|
|
})
|
|
|
|
|
return { promise, resolve, reject }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function promiseFactoryFor<T>(
|
|
|
|
|
resolve: (value: T | PromiseLike<T>) => void,
|
|
|
|
|
reject: (value: T | PromiseLike<T>) => void
|
|
|
|
|
) {
|
|
|
|
|
const promise = new Promise<T>((_resolve, _reject) => {
|
|
|
|
|
resolve = _resolve
|
|
|
|
|
reject = _reject
|
|
|
|
|
})
|
|
|
|
|
return { promise, resolve, reject }
|
|
|
|
|
}
|
|
|
|
|