data(){
return {
timeout: 28*1000,
timeoutObj: null,
serverTimeoutObj: null,
timeoutnum: null,
surpriseNums: null,
surpriseReconnect: false,
}
},
mounted(){
this.surpriseNum();
},
methods: {
surpriseNum() {
var _this = this;
if (!window.location.origin) {
window.location.host =
window.location.hostname +
(window.location.port ? ":" + window.location.port : "");
}
var protocol = "ws";
if (location.protocol === "https:") {
protocol = "wss";
}
_this.surpriseNums = new WebSocket(
`${protocol}://${window.location.host}/api/chatroom/room/` +
_this.chatRoomId +
"/type/image" +
"/member_id/" +
_this.userInfo.id +
"/member_name/" +
_this.userInfo.name
);
_this.surpriseNums.onopen = function(evt) {
console.log("surpriseNum建立连接");
_this.start();
};
_this.surpriseNums.onclose = function(evt) {
console.log("surpriseNum关闭连接");
_this.reconnect();
};
_this.surpriseNums.onerror = function(evt) {
_this.reconnect();
};
_this.surpriseNums.onmessage = function(evt) {
_this.reset();
};
},
reconnect() {
var that = this;
if(that.surpriseReconnect) {
return;
};
that.surpriseReconnect = true;
that.timeoutnum && clearTimeout(that.timeoutnum);
that.timeoutnum = setTimeout(function () {
that.surpriseNum();
that.surpriseReconnect = false;
},5000);
},
reset(){
var that = this;
clearTimeout(that.timeoutObj);
clearTimeout(that.serverTimeoutObj);
that.start();
},
start(){
var self = this;
self.timeoutObj && clearTimeout(self.timeoutObj);
self.serverTimeoutObj && clearTimeout(self.serverTimeoutObj);
self.timeoutObj = setTimeout(() => {
if (self.surpriseNums.readyState == 1) {
var data = {
action: "hert",
content: {
type: "words",
content: '',
org_image: ""
}
};
self.surpriseNums.send(JSON.stringify(data));
}else{
self.reconnect();
}
self.serverTimeoutObj = setTimeout(function() {
self.surpriseNums.close();
}, self.timeout);
}, self.timeout)
},
}