const
app = getApp();
let url = 'wss:
export
const
connect =
function
(cb) {
wx.connectSocket({
url: url,
fail (err) {
if
(err) {
console.log('%cWebSocket连接失败', 'color:red', err)
app.globalData.socketConnectFail = true
}
}
})
wx.onSocketOpen(
function
(res) {
console.log('WebSocket打开成功');
wx.sendSocketMessage({
data: String2Base64(),
success (data) {
console.log('WebSocket发送消息:', data.errMsg)
},
fail (err) {
console.log('Err', err)
}
})
})
wx.onSocketMessage(
function
(res) {
console.log('WebSocket接收到消息:', ArryBuffer2Json(res.data));
cb(ArryBuffer2Json(res.data));
})
wx.onSocketError(
function
(res) {
console.log('WebSocket连接打开失败')
})
wx.onSocketClose(
function
(res) {
console.log('WebSocket关闭');
})
};
function
ArryBuffer2Json (data) {
try
{
var
encodedString = String.fromCharCode.apply(null,
new
Uint8Array(data));
var
decodedString = decodeURIComponent(atob(encodedString));
return
JSON.parse(decodedString);
}
catch
(err) {
console.log(err);
return
false;
}
}
function
String2Base64 () {
var
packet = {};
packet[
"cmd"
] =
"subscribe"
;
packet[
"reqNo"
] =
""
+
new
Date
().getTime();
packet[
"params"
] = {token: token, channelId: 'xcx', columnIds:
"1"
};
return
stringToUint(JSON.stringify(packet))
}
function
stringToUint (string) {
var
string =
base64_encode
(encodeURIComponent(string)),
charList = string.split(''),
uintArray = [];
for
(
var
i = 0; i < charList.length; i++) {
uintArray.push(charList[i].charCodeAt(0));
}
return
new
Uint8Array(uintArray);
}
function
base64_encode
(str) {
var
c1, c2, c3;
var
base64EncodeChars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
;
var
i = 0, len = str.length, string = '';
while
(i < len) {
c1 = str.charCodeAt(i++) & 0xff;
if
(i == len) {
string += base64EncodeChars.charAt(c1 >> 2);
string += base64EncodeChars.charAt((c1 & 0x3) << 4);
string +=
"=="
;
break
;
}
c2 = str.charCodeAt(i++);
if
(i == len) {
string += base64EncodeChars.charAt(c1 >> 2);
string += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
string += base64EncodeChars.charAt((c2 & 0xF) << 2);
string +=
"="
;
break
;
}
c3 = str.charCodeAt(i++);
string += base64EncodeChars.charAt(c1 >> 2);
string += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
string += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
string += base64EncodeChars.charAt(c3 & 0x3F)
}
return
string
}