class websocketUtil {
	constructor(url, time) {
		console.log("url: ", url)
		this.is_open_socket = false //避免重复连接
		this.url = url //地址
		this.data = null
		//心跳检测
		this.timeout= time //多少秒执行检测
		this.heartbeatInterval= null //检测服务器端是否还活着
		this.reconnectTimeOut= null //重连之后多久再次重连

		try {
			return this.connectSocketInit()
		} catch (e) {
			console.log('catch');
			this.is_open_socket = false
			this.reconnect();
		}
	}

	// 进入这个页面的时候创建websocket连接【整个页面随时使用】
	connectSocketInit() {
		this.socketTask = uni.connectSocket({
			url: this.url,
			success:()=>{
				console.log("正准备建立websocket中...");
				// 返回实例
				return this.socketTask
			},
		});
	
		// 这里仅是事件监听【如果socket关闭了会执行】
		// this.socketTask.onClose((res) => {
		// 	console.log("已经被关闭了", res);
		// 	this.is_open_socket = false;
		// 	if(res.code != 4000){ //不是主动关闭就重连
		// 		this.reconnect();
		// 	}
		// })
	}
	
	//发送消息
	send(value){
		// 注：只有连接正常打开中 ，才能正常成功发送消息
		this.socketTask.send({
			data: value,
			async success() {
				console.log("消息发送成功");
			},
		});
	}
	//开启心跳检测
	start(){
		this.heartbeatInterval = setTimeout(()=>{
			this.data={value:"传输内容",method:"方法名称"}
			console.log(this.data)
			this.send(JSON.stringify(this.data));
		},this.timeout)
	}
	//重新连接
	reconnect(){
		//停止发送心跳
		clearInterval(this.heartbeatInterval)
		//如果不是人为关闭的话，进行重连
		if(!this.is_open_socket){
			this.reconnectTimeOut = setTimeout(()=>{
				this.connectSocketInit();
			},3000)
		}
	}
	
	close() {
		this.socketTask.close({
			code: 4000,
			reason: '主动关闭',
			async success() {
				console.log('主动关闭');
			},
			fail(err) {
				console.log('调用close函数失败', err);
			}
		});
	}
}

export default websocketUtil;