From bf84060f5e6d306defa4a00b7b7b4cf586cd40fe Mon Sep 17 00:00:00 2001 From: oguzhankoral Date: Fri, 14 Jul 2023 12:49:26 +0300 Subject: [PATCH] Create SketchupBridge for tryHoistBinding --- packages/dui3/lib/bridge/base.ts | 2 ++ packages/dui3/lib/bridge/sketchup.ts | 3 +++ packages/dui3/plugins/00.bindings.ts | 14 ++++++++++---- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/packages/dui3/lib/bridge/base.ts b/packages/dui3/lib/bridge/base.ts index ade5aa42c..8d0e1e67f 100644 --- a/packages/dui3/lib/bridge/base.ts +++ b/packages/dui3/lib/bridge/base.ts @@ -18,6 +18,8 @@ export class BaseBridge { // NOTE: this could be private - as it should be only used by the host application. emit(eventName: string, payload: string) { + console.log(payload) + const parsedPayload = payload ? (JSON.parse(payload) as unknown) : null this.emitter.emit(eventName, parsedPayload) } diff --git a/packages/dui3/lib/bridge/sketchup.ts b/packages/dui3/lib/bridge/sketchup.ts index db2e20ccc..46566b2c5 100644 --- a/packages/dui3/lib/bridge/sketchup.ts +++ b/packages/dui3/lib/bridge/sketchup.ts @@ -117,6 +117,9 @@ export class SketchupBridge extends BaseBridge { } private receiveResponse(requestId: string, data: string) { + console.log(requestId) + console.log(data) + if (!this.requests[requestId]) throw new Error( `Sketchup Bridge found no request to resolve with the id of ${requestId}. Something is weird!` diff --git a/packages/dui3/plugins/00.bindings.ts b/packages/dui3/plugins/00.bindings.ts index 61eb51f5a..59fb3f1ee 100644 --- a/packages/dui3/plugins/00.bindings.ts +++ b/packages/dui3/plugins/00.bindings.ts @@ -5,6 +5,7 @@ import { IBaseBinding, IRhinoRandomBinding } from '~/lib/bindings/definitions/baseBindings' +import { SketchupBridge } from '~/lib/bridge/sketchup' // Makes TS happy declare let globalThis: Record & { @@ -25,10 +26,13 @@ export default defineNuxtPlugin(async () => { 'rhinoRandomBinding' ) + const sketchupRandomBinding = await tryHoistBinding('sketchupRandomBinding') + return { provide: { baseBinding, - rhinoRandomBinding + rhinoRandomBinding, + sketchupRandomBinding } } }) @@ -40,7 +44,7 @@ export default defineNuxtPlugin(async () => { * @returns null if the binding was not found, or the binding. */ const tryHoistBinding = async (name: string) => { - let bridge: GenericBridge | null = null + let bridge: GenericBridge | SketchupBridge | null = null if (globalThis.CefSharp) { await globalThis.CefSharp.BindObjectAsync(name) @@ -48,13 +52,15 @@ const tryHoistBinding = async (name: string) => { await bridge.create() } - if (globalThis.chrome && !bridge) { + if (globalThis.chrome && globalThis.chrome.webview && !bridge) { bridge = new GenericBridge(globalThis.chrome.webview.hostObjects[name]) await bridge.create() } if (globalThis.sketchup && !bridge) { - // TODO + bridge = new SketchupBridge(name) + const res = await bridge.isInitalized + if (!res) bridge = null } if (!bridge) console.warn(`Failed to bind ${name} binding.`)