import { setCookie, getCookie, WriteCookie,clonAllCookie } from "@/tool/cookie";
import MyEvent from "@/tool/myEvents";
class MyWs {
	constructor() {
		this.ws = null;
		// this.ws = new WebSocket();
		let http = process.env.VUE_APP_BASE_URL.replace(/^https?:\/\//, '')
		this.messageUrl = http+'/notification'
		this.wsUrl = ''
		this.reconnectionTime = null
		this.times = 0
		this.sendPINGTime = null
	}
	linkWs(url) {
		if(!(JSON.parse(getCookie("userInfo"))))return
		if (this.ws && this.ws.readyState == 1) return
		if(!this.wsUrl)this.wsUrl = url +`/${JSON.parse(getCookie("userInfo")).userId}`
		this.ws = new WebSocket(this.wsUrl)
		this.ws.onmessage = (e)=>{
			try {
				let rv = JSON.parse(e.data)
				if(rv == "PONG")return
				this.times = 0
				MyWs.receiveText(rv)
			} catch (error) {
				console.error('websocket',error)
			}
		}
		clearInterval(this.sendPINGTime)
		this.sendPINGTime = setInterval(()=>{
			this.send({text:'PING'})
		// },1000)
		},1000*60*2)
		this.ws.onclose = (e)=>{
			this.reconnection()
		}
		this.ws.onerror = (e)=>{
			this.reconnection()
		}
	}
	reconnection(){
		this.times++
		clearTimeout(this.reconnectionTime)
		if(this.times>=10)return
		clearInterval(this.sendPINGTime)
		this.reconnectionTime = setTimeout(()=>{
		    this.linkWs(this.wsUrl)
		},1000)
	}
	static receiveText(data,call){
		MyEvent.emit('getMessage',data)
	}
	sendMessage(data) {
		if (this.ws && this.ws.readyState == 1) {
			let obj = {
				cmd: 1,
				data: {
					name: '123',
				}
			}
			this.send(obj)
			obj = {
				cmd: 4,
				data: {
					msg: data,
				}
			}
			this.send(obj)
			// obj = {
			// 	cmd: 6,
			// 	data: {
			// 		msg: data,
			// 	}
			// }
			// this.send(obj,this.ws)
		}
	}
 	send(obj) {
		if(this.ws.readyState == 1){
			this.ws.send(JSON.stringify(obj))
		}else{
			clearTimeout(this.sendPINGTime)
			this.reconnection()
		}
	}
	close(){
		if (this.ws && this.ws.readyState == 1) {
			console.log("客户端 连接已关闭")
			this.ws.close()
		}
	}
}

export default new MyWs()