Reworked SDKs events (introduced sdk-state-change)
[src/xds/xds-agent.git] / webapp / src / app / @core-xds / services / xdsagent.service.ts
index 27e14cf..033185b 100644 (file)
@@ -133,8 +133,10 @@ export class XDSAgentService {
   protected projectDel$ = new Subject<IXDSProjectConfig>();
   protected projectChange$ = new Subject<IXDSProjectConfig>();
 
-  protected sdkInstall$ = new Subject<ISdkManagementMsg>();
-  protected sdkRemove$ = new Subject<ISdkManagementMsg>();
+  protected sdkAdd$ = new Subject<ISdk>();
+  protected sdkRemove$ = new Subject<ISdk>();
+  protected sdkChange$ = new Subject<ISdk>();
+  protected sdkManagement$ = new Subject<ISdkManagementMsg>();
 
   private baseUrl: string;
   private wsUrl: string;
@@ -249,6 +251,8 @@ export class XDSAgentService {
       }
     });
 
+    /*** Project events ****/
+
     this.socket.on('event:project-add', (ev) => {
       if (ev && ev.data && ev.data.id) {
         this.projectAdd$.next(Object.assign({}, ev.data));
@@ -280,32 +284,59 @@ export class XDSAgentService {
       }
     });
 
-    this.socket.on('event:sdk-install', (ev) => {
-      if (ev && ev.data && ev.data.sdk) {
-        const evt = <ISdkManagementMsg>ev.data;
-        this.sdkInstall$.next(Object.assign({}, evt));
+    /*** SDK Events ***/
 
-        if (ev.sessionID !== '' && ev.sessionID !== this.httpSessionID && evt.sdk.name) {
-          this.alert.info('SDK "' + evt.sdk.name + '" has been installed by another tool.');
+    this.socket.on('event:sdk-add', (ev) => {
+      if (ev && ev.data && ev.data.id) {
+        const evt = <ISdk>ev.data;
+        this.sdkAdd$.next(Object.assign({}, evt));
+
+        if (ev.sessionID !== '' && ev.sessionID !== this.httpSessionID && evt.name) {
+          this.alert.info('SDK "' + evt.name + '" has been added by another tool.');
         }
       } else if (isDevMode) {
-        /* tslint:disable:no-console */
-        console.log('Warning: received event:sdk-install with unknown data: ev=', ev);
+        console.log('Warning: received event:sdk-add with unknown data: ev=', ev);
       }
     });
 
     this.socket.on('event:sdk-remove', (ev) => {
+      if (ev && ev.data && ev.data.id) {
+        const evt = <ISdk>ev.data;
+        this.sdkRemove$.next(Object.assign({}, evt));
+
+        if (ev.sessionID !== '' && ev.sessionID !== this.httpSessionID && evt.name) {
+          this.alert.info('SDK "' + evt.name + '" has been removed by another tool.');
+        }
+      } else if (isDevMode) {
+        console.log('Warning: received event:sdk-remove with unknown data: ev=', ev);
+      }
+    });
+
+    this.socket.on('event:sdk-state-change', (ev) => {
+      if (ev && ev.data && ev.data.id) {
+        const evt = <ISdk>ev.data;
+        this.sdkChange$.next(Object.assign({}, evt));
+
+      } else if (isDevMode) {
+        console.log('Warning: received event:sdk-state-change with unknown data: ev=', ev);
+      }
+    });
+
+
+    this.socket.on('event:sdk-management', (ev) => {
       if (ev && ev.data && ev.data.sdk) {
         const evt = <ISdkManagementMsg>ev.data;
-        this.sdkRemove$.next(Object.assign({}, evt));
+        this.sdkManagement$.next(Object.assign({}, evt));
 
         if (ev.sessionID !== '' && ev.sessionID !== this.httpSessionID && evt.sdk.name) {
-          this.alert.info('SDK "' + evt.sdk.name + '" has been removed by another tool.');
+          this.alert.info('SDK "' + evt.sdk.name + '" has been installed by another tool.');
         }
       } else if (isDevMode) {
-        console.log('Warning: received event:sdk-remove with unknown data: ev=', ev);
+        /* tslint:disable:no-console */
+        console.log('Warning: received event:sdk-install with unknown data: ev=', ev);
       }
     });
+
   }
 
   /**
@@ -323,14 +354,22 @@ export class XDSAgentService {
     return this.projectChange$.asObservable();
   }
 
-  onSdkInstall(): Observable<ISdkManagementMsg> {
-    return this.sdkInstall$.asObservable();
+  onSdkAdd(): Observable<ISdk> {
+    return this.sdkAdd$.asObservable();
   }
 
-  onSdkRemove(): Observable<ISdkManagementMsg> {
+  onSdkRemove(): Observable<ISdk> {
     return this.sdkRemove$.asObservable();
   }
 
+  onSdkChange(): Observable<ISdk> {
+    return this.sdkChange$.asObservable();
+  }
+
+  onSdkManagement(): Observable<ISdkManagementMsg> {
+    return this.sdkManagement$.asObservable();
+  }
+
   /**
   ** Misc / Version
   ***/