wsconn.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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. recv (cb) {
  18. this.$on('message', obj => cb(obj))
  19. }
  20. }
  21. })
  22. const connect = (loc) => {
  23. ws = new window.WebSocket(loc)
  24. ws.onopen = () => { connected = true; eventBus.$emit('open') }
  25. ws.onerror = (e) => { connected = false }
  26. ws.onclose = (e) => {
  27. // console.log('Disconnected', e)
  28. if (connected === true) { } // emit close
  29. connected = false
  30. setTimeout(() => connect(loc), 3000) // Reconnect
  31. }
  32. ws.onmessage = (e) => { // receiving message
  33. // console.log('Message received', e)
  34. eventBus.$emit('message', JSON.parse(e.data))
  35. }
  36. }
  37. connect(options.location)
  38. eventBus.$on('send', (msg) => {
  39. ws.send(JSON.stringify(msg))
  40. })
  41. Vue.prototype.$ws = eventBus
  42. }
  43. }