wsconn.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. export default {
  2. install (Vue, options) {
  3. let ws
  4. let connected = false
  5. const eventBus = new Vue({
  6. methods: {
  7. send (msg) {
  8. if (connected === false) {
  9. console.log('No connection, scheduling message')
  10. this.$on('open', () => {
  11. this.$emit('send', msg)
  12. })
  13. return
  14. }
  15. this.$emit('send', msg)
  16. }
  17. }
  18. })
  19. const connect = (loc) => {
  20. ws = new window.WebSocket(loc)
  21. ws.onopen = () => { this.connected = true; console.log('Connected'); eventBus.$emit('open') }
  22. ws.onmessage = (e) => {}
  23. ws.onerror = (e) => { this.connected = false; console.log('Error:', e) }
  24. ws.onclose = () => {
  25. if (connected === true) { } // emit close
  26. connected = false
  27. setTimeout(() => connect(loc), 3000) // Reconnect
  28. }
  29. ws.onmessage = (e) => { // receiving message
  30. console.log('Message received')
  31. eventBus.$emit('message', JSON.parse(e.data))
  32. }
  33. }
  34. connect(options.location)
  35. eventBus.$on('send', (msg) => {
  36. console.log('Sending message', msg)
  37. ws.send(JSON.stringify(msg))
  38. })
  39. Vue.prototype.$ws = eventBus
  40. }
  41. }