export default { install (Vue, options) { let ws let connected = false const eventBus = new Vue({ methods: { send (msg) { if (connected === false) { console.log('No connection, scheduling message') this.$on('open', () => { this.$emit('send', msg) }) return } this.$emit('send', msg) } } }) const connect = (loc) => { ws = new window.WebSocket(loc) ws.onopen = () => { this.connected = true; console.log('Connected'); eventBus.$emit('open') } ws.onmessage = (e) => {} ws.onerror = (e) => { this.connected = false; console.log('Error:', e) } ws.onclose = () => { if (connected === true) { } // emit close connected = false setTimeout(() => connect(loc), 3000) // Reconnect } ws.onmessage = (e) => { // receiving message console.log('Message received') eventBus.$emit('message', JSON.parse(e.data)) } } connect(options.location) eventBus.$on('send', (msg) => { console.log('Sending message', msg) ws.send(JSON.stringify(msg)) }) Vue.prototype.$ws = eventBus } }