From 04968d088b8e348c42707d94d879083538274e68 Mon Sep 17 00:00:00 2001 From: Gregor Biswanger Date: Fri, 11 Jan 2019 02:42:32 +0100 Subject: [PATCH] fix ElectronHostHook path, exception handling --- ElectronNET.API/HostHook.cs | 16 +++++++++++++++- ElectronNET.Host/ElectronHostHook/connector.ts | 14 +++++++++++--- ElectronNET.Host/ElectronHostHook/index.ts | 1 + ElectronNET.Host/main.js | 2 +- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/ElectronNET.API/HostHook.cs b/ElectronNET.API/HostHook.cs index 039f672..0c88304 100644 --- a/ElectronNET.API/HostHook.cs +++ b/ElectronNET.API/HostHook.cs @@ -34,7 +34,15 @@ namespace ElectronNET.API public void Call(string socketEventName, params dynamic[] arguments) { - BridgeConnector.Socket.Emit(socketEventName, arguments); + string guid = Guid.NewGuid().ToString(); + + BridgeConnector.Socket.On(socketEventName + "Error" + guid, (result) => + { + BridgeConnector.Socket.Off(socketEventName + "Error" + guid); + Electron.Dialog.ShowErrorBox("Host Hook Exception", result.ToString()); + }); + + BridgeConnector.Socket.Emit(socketEventName, arguments, guid); } public Task CallAsync(string socketEventName, params dynamic[] arguments) @@ -42,6 +50,12 @@ namespace ElectronNET.API var taskCompletionSource = new TaskCompletionSource(); string guid = Guid.NewGuid().ToString(); + BridgeConnector.Socket.On(socketEventName + "Error" + guid, (result) => + { + BridgeConnector.Socket.Off(socketEventName + "Error" + guid); + Electron.Dialog.ShowErrorBox("Host Hook Exception", result.ToString()); + }); + BridgeConnector.Socket.On(socketEventName + "Complete" + guid, (result) => { BridgeConnector.Socket.Off(socketEventName + "Complete" + guid); diff --git a/ElectronNET.Host/ElectronHostHook/connector.ts b/ElectronNET.Host/ElectronHostHook/connector.ts index 94e5b4b..7ab7cd9 100644 --- a/ElectronNET.Host/ElectronHostHook/connector.ts +++ b/ElectronNET.Host/ElectronHostHook/connector.ts @@ -5,9 +5,17 @@ export class Connector { this.socket.on(key, (...args: any[]) => { const id: string = args.pop(); - javaScriptCode(args, (data) => { - this.socket.emit(`${key}Complete${id}`, data); - }); + try { + javaScriptCode(...args, (data) => { + if (isNaN(data)) { + throw new Error('Result is NaN'); + } else { + this.socket.emit(`${key}Complete${id}`, data); + } + }); + } catch (error) { + this.socket.emit(`${key}Error${id}`, 'Host Hook Exception', error); + } }); } } diff --git a/ElectronNET.Host/ElectronHostHook/index.ts b/ElectronNET.Host/ElectronHostHook/index.ts index 714d2e6..1d5ae24 100644 --- a/ElectronNET.Host/ElectronHostHook/index.ts +++ b/ElectronNET.Host/ElectronHostHook/index.ts @@ -1,4 +1,5 @@ import * as Electron from "electron"; +import { Connector } from "./connector"; export class HookService extends Connector { constructor(socket: SocketIO.Socket, public app: Electron.App) { diff --git a/ElectronNET.Host/main.js b/ElectronNET.Host/main.js index a515fa3..700cccb 100644 --- a/ElectronNET.Host/main.js +++ b/ElectronNET.Host/main.js @@ -106,7 +106,7 @@ function startSocketApiBridge(port) { } try { - const hostHookScriptFilePath = path.join(__dirname, 'bin', 'ElectronHostHook', 'index.js'); + const hostHookScriptFilePath = path.join(__dirname, 'ElectronHostHook', 'index.js'); const { HookService } = require(hostHookScriptFilePath); if (hostHook === undefined) { hostHook = new HookService(socket, app);