63 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
import $store from "@/store";
 | 
						|
import { VUE_APP_WS_URL } from "@/utils/index.js";
 | 
						|
 | 
						|
const Socket = function() {
 | 
						|
  this.ws = new WebSocket(wss(VUE_APP_WS_URL));
 | 
						|
  this.ws.onopen = this.onOpen.bind(this);
 | 
						|
  this.ws.onerror = this.onError.bind(this);
 | 
						|
  this.ws.onmessage = this.onMessage.bind(this);
 | 
						|
  this.ws.onclose = this.onClose.bind(this);
 | 
						|
};
 | 
						|
 | 
						|
function wss(wsSocketUrl) {
 | 
						|
    let ishttps = document.location.protocol == 'https:';
 | 
						|
    if (ishttps) {
 | 
						|
        return wsSocketUrl.replace('ws:', 'wss:');
 | 
						|
    } else {
 | 
						|
        return wsSocketUrl.replace('wss:', 'ws:');
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
Socket.prototype = {
 | 
						|
  vm(vm) {
 | 
						|
    this.vm = vm;
 | 
						|
  },
 | 
						|
  close() {
 | 
						|
    clearInterval(this.timer);
 | 
						|
    this.ws.close();
 | 
						|
  },
 | 
						|
  onOpen: function() {
 | 
						|
    console.log("ws open");
 | 
						|
    this.init();
 | 
						|
    this.send({
 | 
						|
      type: "login",
 | 
						|
      data: $store.state.app.token
 | 
						|
    });
 | 
						|
    this.vm.$emit("socket_open");
 | 
						|
  },
 | 
						|
  init: function() {
 | 
						|
    var that = this;
 | 
						|
    this.timer = setInterval(function() {
 | 
						|
      that.send({ type: "ping" });
 | 
						|
    }, 10000);
 | 
						|
  },
 | 
						|
  send: function(data) {
 | 
						|
    return this.ws.send(JSON.stringify(data));
 | 
						|
  },
 | 
						|
  onMessage: function(res) {
 | 
						|
    const { type, data = {} } = JSON.parse(res.data);
 | 
						|
    this.vm.$emit(type, data);
 | 
						|
  },
 | 
						|
  onClose: function() {
 | 
						|
    clearInterval(this.timer);
 | 
						|
  },
 | 
						|
  onError: function(e) {
 | 
						|
    console.log(e);
 | 
						|
    this.vm.$emit("socket_error", e);
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
Socket.prototype.constructor = Socket;
 | 
						|
 | 
						|
export default Socket;
 |