Add collaboration feature
[sdc.git] / openecomp-ui / src / nfvo-utils / WebSocketUtil.js
1 /*!
2  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
13  * or implied. See the License for the specific language governing
14  * permissions and limitations under the License.
15  */
16
17 import store from 'sdc-app/AppStore.js';
18 import Configuration from 'sdc-app/config/Configuration.js';
19 import {actionTypes} from 'sdc-app/onboarding/userNotifications/UserNotificationsConstants.js';
20
21
22 export const websocketUrl = 'ws://' + window.location.hostname + ':' + Configuration.get('websocketPort')
23         + '/'  + Configuration.get('websocketPath');
24
25 /***
26  * Websocket is treated like a singleton. only need one for the application.
27  */
28 var websocket;
29
30
31 export default {
32
33         open(url, {lastScanned}) {
34                 if (websocket === undefined || websocket.readyState === websocket.CLOSED) {
35                         websocket = new WebSocket(`${url}?LAST_DELIVERED_EVENT_ID=${lastScanned}`);
36                         websocket.onmessage = event => store.dispatch({
37                                 type: actionTypes.NOTIFICATION,
38                                 data: JSON.parse(event.data)
39                         });
40                         websocket.onclose = event => {
41                                 if(event.code && event.code === 1001) { // - Idle Timeout
42                                         const {lastScanned} = store.getState().notifications;
43                                         console.log('Reconnecting to Websocket');
44                                         this.open(websocketUrl, {lastScanned});
45                                 }
46                         };
47                         websocket.onerror = event => console.log(event);
48                 }
49         },
50
51         close() {
52                 if (websocket !== undefined) {
53                         websocket.close();
54                 }
55         }
56 };