1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- 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
- }
- }
|