138 lines
3.2 KiB
JavaScript

const MESSAGE = 2;
const REPLY_BODY = 4;
const SENT_BODY = 3;
const PING = 1;
const PONG = 0;
let self;
Page({
/**
* 页面的初始数据
*/
data: {
websocketTask:undefined,
websocketConnected:false,
websocketConnectedTimes:0,
wssUri:"wss://your.doman.com",
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
self = this;
this.createWebsocketConnection();
},
onShow() {
},
sendWebsocketPong(){
if(this.data.websocketTask == undefined){
return;
}
let pong = {};
pong.type = PONG;
pong.content = 'PONG';
this.data.websocketTask.send({data:JSON.stringify(pong)});
},
createWebsocketConnection(){
let websocketTask = wx.connectSocket({url: this.data.wssUri,});
websocketTask.onOpen(function(res) {
self.setData({websocketTask:websocketTask});
/** 链接成功发送bind请求*/
let body = {};
body.key = "client_bind";
body.data = {};
body.data.uid = '10000';//设置你的用户ID
body.data.channel = 'wechat';
body.data.deviceId = getDeivceId();
body.data.appVersion = '1.0.0';
body.data.osVersion = wx.getSystemInfoSync().version;
body.data.deviceName = wx.getSystemInfoSync().platform;
let data = {};
data.type = SENT_BODY;
data.content = JSON.stringify(body);
wx.sendSocketMessage({data:JSON.stringify(data)});
});
websocketTask.onMessage(function(res) {
let message = JSON.parse(res.data);
let type = message.type;
if (type === PING) {
self.sendWebsocketPong();
return;
}
if (type === REPLY_BODY) {
//bind成功
self.onWebsocketConnected();
return;
}
//拿到了后端发送的消息JSON
let content = JSON.parse(message.content);
});
websocketTask.onClose(function(res) {
self.setData({websocketConnected:false});
if(res.reason != 'FINISH'){
// 在5秒后执行一次
setTimeout(function(){
self.createWebsocketConnection(self.data.room.id);
}, 5000);
}
});
},
onWebsocketConnected(){
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
let websocketTask = this.data.websocketTask;
if(websocketTask != null && websocketTask != undefined){
websocketTask.close({code:1000,reason:"FINISH"});
}
},
getDeivceId() {
let deviceId = wx.getStorageSync('x-device-id');
if(deviceId != undefined && deviceId != ''){
return deviceId;
}
let d = new Date().getTime();
let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
let r = (d + Math.random() * 16) % 16 | 0;
d = Math.floor(d / 16);
return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
});
let newDeviceId = uuid.replace(/-/g, '');
wx.setStorageSync('x-device-id', newDeviceId);
return newDeviceId;
}
})