/* (1) Imports ---------------------------------------------------------*/ /* (1) NPM libs */ import Vue from 'vue' import VueRouter from 'vue-router' /* (2) Internal libs */ import {API} from './lib/api-es6' import {InfoBox} from './lib/infobox-es6' import {WSClient,WSClientBuilder} from './lib/ws-client-es6' import routes from './routes' /* (3) Vues */ import wrapper_vue from './vue/wrapper.vue' /* (2) Initialisation ---------------------------------------------------------*/ /* (1) global store init */ require('./vue-config'); window.gstore.add('server', window._SERVER); window.infobox = new InfoBox(gstore.data.info); /* (2) API */ window.api = new API(gstore.data.is_local ? 'http://ndli1718/api/v/1.0/' : 'https://ndli1718.xdrm.io/api/v/1.0/'); /* (3) wsclient */ window.wsc = new WSClientBuilder(gstore.data.is_local ? 'ws://localhost:9999' : 'wss://websocket.xdrm.io'); /* (4) Init vue router */ Vue.use(VueRouter); const router = new VueRouter({ mode: 'history', routes: routes[0] }); /* (5) Render view */ new Vue({ el: '#main-vue', router, render: h => h(wrapper_vue) }); /* (6) Navigate at page load (to update notifications count) */ gstore.data.func.nav(router, null); /* (3) Set WebSocket channels ---------------------------------------------------------*/ /* (1) Connection channel */ window.wsc_connect = wsc.channel('connect').listen(function(msg, err){ // {1} Manage error // if( msg == null && err != null ) return infobox.show('Erreur de connexion WebSocket@connect ('+err+')', 'error', 3000); // {2} Manage wsclient error // if( typeof msg.error != 'boolean' || msg.error !== false ) return infobox.show('Erreur de connexion WebSocket@connect', 'warning', 3000); // {3} If no data -> exit // if( msg.connected == null && msg.disconnected == null ) return; // {4} Add connected users to stack // if( msg.connected instanceof Array ){ // -1- add connected users console.log('Detected '+msg.connected.length+' connected user(s)'); var lastLen = gstore.data.notif[0].data.length; gstore.data.notif[0].data = gstore.data.notif[0].data.concat( msg.connected ); // -2- make each user unique gstore.data.notif[0].data = gstore.data.notif[0].data.filter(function(item, i, arr){ return arr.indexOf(item) === i; }); // -3- Update count if not already on page if( router.app.$route.path != '/notifications' ) gstore.data.notif[0].count += gstore.data.notif[0].data.length - lastLen; } // {5} Add disconnected users to stack // if( msg.disconnected instanceof Array ){ // -1- Remove each disconnected user console.log('Detected '+msg.disconnected.length+' disconnected user(s)'); var lastLen = gstore.data.notif[0].data.length; gstore.data.notif[0].data = gstore.data.notif[0].data.filter(function(item){ return msg.disconnected.indexOf(item) === -1; }); // -2- Update count if not already on page if( router.app.$route.path != '/notifications' ) gstore.data.notif[0].count += lastLen - gstore.data.notif[0].data.length; } }).send({name: _SERVER.session.name}); /* (2) Message channel */ window.wsc_chat = wsc.channel('chat').listen(function(msg, err){ // {1} Manage error // if( msg == null && err != null ) return infobox.show('Erreur de connexion WebSocket@chat ('+err+')', 'error', 3000); // {2} Manage wsclient error // if( typeof msg.error != 'boolean' || msg.error !== false ) return infobox.show('Erreur de connexion WebSocket@chat', 'warning', 3000); // {3} If no message -> exit // if( msg.msg == null ) return; // {4} Play sound if 1msg received + not already on page // // note: 1msg means a new message but not the page load past buffer if( msg.msg.length == 1 && router.app.$route.path != '/inbox' ) ( new Audio('https://notificationsounds.com/message-tones/communication-channel-519/download/mp3') ).play(); // {5} Add messages to stack // gstore.data.notif[1].data = gstore.data.notif[1].data.concat( msg.msg ); // {6} Add notification count if not already on page // if( router.app.$route.path != '/inbox' ) gstore.data.notif[1].count += msg.msg.length; }).send({name: _SERVER.session.name});