aboutsummaryrefslogtreecommitdiffstats
path: root/sdnr/wt/odlux/framework/src/services/notificationService.ts
diff options
context:
space:
mode:
Diffstat (limited to 'sdnr/wt/odlux/framework/src/services/notificationService.ts')
-rw-r--r--sdnr/wt/odlux/framework/src/services/notificationService.ts220
1 files changed, 0 insertions, 220 deletions
diff --git a/sdnr/wt/odlux/framework/src/services/notificationService.ts b/sdnr/wt/odlux/framework/src/services/notificationService.ts
deleted file mode 100644
index b2880b9de..000000000
--- a/sdnr/wt/odlux/framework/src/services/notificationService.ts
+++ /dev/null
@@ -1,220 +0,0 @@
-/**
- * ============LICENSE_START========================================================================
- * ONAP : ccsdk feature sdnr wt odlux
- * =================================================================================================
- * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
- * =================================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- * ============LICENSE_END==========================================================================
- */
-import { ApplicationStore } from '../store/applicationStore';
-import { SetWebsocketAction } from '../actions/websocketAction';
-
-const socketUrl = [location.protocol === 'https:' ? 'wss://' : 'ws://', location.hostname, ':', location.port, '/websocket'].join('');
-const subscriptions: { [scope: string]: SubscriptionCallback[] } = {};
-let socketReady: Promise<WebSocket>;
-let wasWebsocketConnectionEstablished: undefined | boolean;
-let applicationStore: ApplicationStore | null;
-
-let areWebsocketsStoppedViaSettings = false;
-
-
-export interface IFormatedMessage {
- "event-time": string,
- "data": {
- "counter": number,
- "attribute-name": string,
- "time-stamp": string,
- "object-id-ref": string,
- "new-value": string
- },
- "node-id": string,
- "type": {
- "namespace": string,
- "revision": string,
- "type": string
- }
-}
-
-export type SubscriptionCallback<TMessage extends IFormatedMessage = IFormatedMessage> = (msg: TMessage) => void;
-
-function setCurrentSubscriptions(notificationSocket: WebSocket) {
- const scopesToSubscribe = Object.keys(subscriptions);
- if (notificationSocket.readyState === notificationSocket.OPEN) {
- const data = {
- 'data': 'scopes',
- 'scopes':[{
- "schema":{
- "namespace":"urn:opendaylight:params:xml:ns:yang:devicemanager",
- "revision":"*",
- "notification": scopesToSubscribe
- }
- }]
- };
- notificationSocket.send(JSON.stringify(data));
- return true;
- };
- return false;
-}
-
-function addScope<TMessage extends IFormatedMessage = IFormatedMessage>(scope: string | string[], callback: SubscriptionCallback<TMessage>) {
- const scopes = scope instanceof Array ? scope : [scope];
-
- // send all new scopes to subscribe
- const newScopesToSubscribe: string[] = scopes.reduce((acc: string[], cur: string) => {
- const currentCallbacks = subscriptions[cur];
- if (currentCallbacks) {
- if (!currentCallbacks.some(c => c === callback)) {
- currentCallbacks.push(callback);
- }
- } else {
- subscriptions[cur] = [callback];
- acc.push(cur);
- }
- return acc;
- }, []);
-
- if (newScopesToSubscribe.length === 0) {
- return true;
- }
- return false;
-}
-
-function removeScope<TMessage extends IFormatedMessage = IFormatedMessage>(scope: string | string[], callback: SubscriptionCallback<TMessage>) {
- const scopes = scope instanceof Array ? scope : [scope];
- scopes.forEach(s => {
- const callbacks = subscriptions[s];
- const index = callbacks && callbacks.indexOf(callback);
- if (index > -1) {
- callbacks.splice(index, 1);
- }
- if (callbacks.length === 0) {
- subscriptions[s] === undefined;
- }
- });
-}
-
-export function subscribe<TMessage extends IFormatedMessage = IFormatedMessage>(scope: string | string[], callback: SubscriptionCallback<TMessage>): Promise<boolean> {
- addScope(scope, callback)
- return socketReady && socketReady.then((notificationSocket) => {
- // send a subscription to all active scopes
- return setCurrentSubscriptions(notificationSocket);
- }) || true;
-}
-
-export function unsubscribe<TMessage extends IFormatedMessage = IFormatedMessage>(scope: string | string[], callback: SubscriptionCallback<TMessage>): Promise<boolean> {
- removeScope(scope, callback);
- return socketReady && socketReady.then((notificationSocket) => {
- // send a subscription to all active scopes
- return setCurrentSubscriptions(notificationSocket);
- }) || true;
-}
-
-export const startNotificationService = (store: ApplicationStore) => {
- applicationStore = store;
-}
-
-const connect = (): Promise<WebSocket> => {
- return new Promise((resolve, reject) => {
- const notificationSocket = new WebSocket(socketUrl);
-
- notificationSocket.onmessage = (event: MessageEvent<string>) => {
- // process received event
-
- if (event.data && typeof event.data === "string" ) {
- const msg = JSON.parse(event.data) as IFormatedMessage;
- const callbacks = msg?.type?.type && subscriptions[msg.type.type];
- if (callbacks) {
- callbacks.forEach(cb => {
- // ensure all callbacks will be called
- try {
- return cb(msg);
- } catch (reason) {
- console.error(reason);
- }
- });
- }
- }
-
- };
-
- notificationSocket.onerror = function (error) {
- console.log("Socket error:");
- console.log(error);
- reject("Socket error: " + error);
- if (applicationStore) {
- applicationStore.dispatch(new SetWebsocketAction(false));
- }
- };
-
- notificationSocket.onopen = function (event) {
- if (applicationStore) {
- applicationStore.dispatch(new SetWebsocketAction(true));
- }
- console.log("Socket connection opened.");
- resolve(notificationSocket);
-
- // send a subscription to all active scopes
- setCurrentSubscriptions(notificationSocket);
- };
-
- notificationSocket.onclose = function (event) {
- console.log("socket connection closed");
- dispatchSocketClose();
-
- const isUserLoggedIn = applicationStore?.state.framework.authenticationState.user && applicationStore?.state.framework.authenticationState.user?.isValid;
-
- if (isUserLoggedIn && !areWebsocketsStoppedViaSettings) {
- socketReady = connect();
- }
- };
- });
-}
-
-
-export const startWebsocketSession = () => {
- socketReady = connect();
- areWebsocketsStoppedViaSettings = false;
-}
-
-export const suspendWebsocketSession = () =>{
- areWebsocketsStoppedViaSettings = true;
- closeSocket();
-}
-
-export const endWebsocketSession = () => {
- closeSocket();
-}
-
-const closeSocket = () =>{
-
- if (socketReady) {
- socketReady.then(websocket => {
- websocket.close();
- });
- }else{
- dispatchSocketClose();
- }
-}
-
-const dispatchSocketClose = () =>{
- const isUserLoggedIn = applicationStore?.state.framework.authenticationState.user && applicationStore?.state.framework.authenticationState.user?.isValid;
-
- if(isUserLoggedIn){
- applicationStore?.dispatch(new SetWebsocketAction(false));
- }else{
- applicationStore?.dispatch(new SetWebsocketAction(null));
- }
-}
-
-
-
-