From 482ca40d480c3220add4049d93f9575771533aa8 Mon Sep 17 00:00:00 2001 From: leejinho Date: Thu, 12 Mar 2020 16:16:04 +0900 Subject: [PATCH] add Error Handler --- .../ucap-webmessenger-electron/src/index.ts | 3 +++ .../src/app/app.module.ts | 3 ++- .../app/error-handler/global.errorhandler.ts | 27 +++++++++++++++++++ .../src/app/error-handler/index.ts | 6 +++++ .../lib/services/browser-native.service.ts | 3 +++ .../lib/services/electron-native.service.ts | 3 +++ .../src/lib/types/channel.type.ts | 3 ++- .../src/lib/services/native.service.ts | 1 + 8 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 projects/ucap-webmessenger-app/src/app/error-handler/global.errorhandler.ts create mode 100644 projects/ucap-webmessenger-app/src/app/error-handler/index.ts diff --git a/electron-projects/ucap-webmessenger-electron/src/index.ts b/electron-projects/ucap-webmessenger-electron/src/index.ts index 458c55e0..3d7423e6 100644 --- a/electron-projects/ucap-webmessenger-electron/src/index.ts +++ b/electron-projects/ucap-webmessenger-electron/src/index.ts @@ -821,6 +821,9 @@ ipcMain.on(ClipboardChannel.Read, (event: IpcMainEvent, ...args: any[]) => { ipcMain.on(AppChannel.Exit, (event: IpcMainEvent, ...args: any[]) => { appExit(); }); +ipcMain.on(AppChannel.Logging, (event: IpcMainEvent, ...args: any[]) => { + log.error('[G]', args[0]); +}); ipcMain.on(ExternalChannel.OpenUrl, (event: IpcMainEvent, ...args: any[]) => { const targetUrl = args[0]; diff --git a/projects/ucap-webmessenger-app/src/app/app.module.ts b/projects/ucap-webmessenger-app/src/app/app.module.ts index 9c356ee8..2e05dfad 100644 --- a/projects/ucap-webmessenger-app/src/app/app.module.ts +++ b/projects/ucap-webmessenger-app/src/app/app.module.ts @@ -50,6 +50,7 @@ import { AppMessengerLayoutModule } from './layouts/messenger/messenger.layout.m import { AppNativeLayoutModule } from './layouts/native/native.layout.module'; import { environment } from '../environments/environment'; +import { ERRORHANDLER } from './error-handler'; @NgModule({ imports: [ @@ -105,7 +106,7 @@ import { environment } from '../environments/environment'; level: NgxLoggerLevel.DEBUG }) ], - providers: [...GUARDS], + providers: [...GUARDS, ERRORHANDLER], declarations: [AppComponent], bootstrap: [AppComponent], entryComponents: [] diff --git a/projects/ucap-webmessenger-app/src/app/error-handler/global.errorhandler.ts b/projects/ucap-webmessenger-app/src/app/error-handler/global.errorhandler.ts new file mode 100644 index 00000000..c5da5dcc --- /dev/null +++ b/projects/ucap-webmessenger-app/src/app/error-handler/global.errorhandler.ts @@ -0,0 +1,27 @@ +import { ErrorHandler, Injectable, Injector, NgZone } from '@angular/core'; +import { NativeService, UCAP_NATIVE_SERVICE } from '@ucap-webmessenger/native'; +import { error } from 'console'; + +@Injectable() +export class AppGlobalErrorhandler implements ErrorHandler { + constructor(private injector: Injector, private zone: NgZone) {} + + // tslint:disable-next-line: no-shadowed-variable + handleError(error: Error) { + let nativeLogging: any; + try { + const nativeService: NativeService = this.injector.get( + UCAP_NATIVE_SERVICE + ); + nativeService.appLogging(error.stack); + nativeLogging = 'SUCCESS'; + } catch (e) { + nativeLogging = e; + } + + console.groupCollapsed('App Global Error Logging'); + console.log('App log', error); + console.log('Native Logging', nativeLogging); + console.groupEnd(); + } +} diff --git a/projects/ucap-webmessenger-app/src/app/error-handler/index.ts b/projects/ucap-webmessenger-app/src/app/error-handler/index.ts new file mode 100644 index 00000000..4ff44985 --- /dev/null +++ b/projects/ucap-webmessenger-app/src/app/error-handler/index.ts @@ -0,0 +1,6 @@ +import { AppGlobalErrorhandler } from './global.errorhandler'; +import { ErrorHandler } from '@angular/core'; + +export const ERRORHANDLER = [ + { provide: ErrorHandler, useClass: AppGlobalErrorhandler } +]; diff --git a/projects/ucap-webmessenger-native-browser/src/lib/services/browser-native.service.ts b/projects/ucap-webmessenger-native-browser/src/lib/services/browser-native.service.ts index bf95404f..6fad45a1 100644 --- a/projects/ucap-webmessenger-native-browser/src/lib/services/browser-native.service.ts +++ b/projects/ucap-webmessenger-native-browser/src/lib/services/browser-native.service.ts @@ -234,6 +234,9 @@ export class BrowserNativeService extends NativeService { } appExit(): void {} + appLogging(error: any): void { + console.error('[G]', error); + } zoomTo(factor: number): Promise { return new Promise((resolve, reject) => { diff --git a/projects/ucap-webmessenger-native-electron/src/lib/services/electron-native.service.ts b/projects/ucap-webmessenger-native-electron/src/lib/services/electron-native.service.ts index 061d2d09..abeea430 100644 --- a/projects/ucap-webmessenger-native-electron/src/lib/services/electron-native.service.ts +++ b/projects/ucap-webmessenger-native-electron/src/lib/services/electron-native.service.ts @@ -414,6 +414,9 @@ export class ElectronNativeService implements NativeService { appExit(): void { this.ipcRenderer.send(AppChannel.Exit); } + appLogging(error: any): void { + this.ipcRenderer.send(AppChannel.Logging, error); + } zoomTo(factor: number): Promise { return new Promise((resolve, reject) => { diff --git a/projects/ucap-webmessenger-native-electron/src/lib/types/channel.type.ts b/projects/ucap-webmessenger-native-electron/src/lib/types/channel.type.ts index f5bae067..8201fec0 100644 --- a/projects/ucap-webmessenger-native-electron/src/lib/types/channel.type.ts +++ b/projects/ucap-webmessenger-native-electron/src/lib/types/channel.type.ts @@ -61,7 +61,8 @@ export enum ClipboardChannel { } export enum AppChannel { - Exit = 'UCAP::app::exit' + Exit = 'UCAP::app::exit', + Logging = 'UCAP::app::logging' } export enum ExternalChannel { diff --git a/projects/ucap-webmessenger-native/src/lib/services/native.service.ts b/projects/ucap-webmessenger-native/src/lib/services/native.service.ts index 961ba426..f31a7d25 100644 --- a/projects/ucap-webmessenger-native/src/lib/services/native.service.ts +++ b/projects/ucap-webmessenger-native/src/lib/services/native.service.ts @@ -76,6 +76,7 @@ export abstract class NativeService { abstract getWindowState(): WindowState; abstract zoomTo(factor: number): Promise; abstract appExit(): void; + abstract appLogging(error: any): void; abstract idleStateChanged(): Observable; abstract idleStateStop(): void;