mirror of https://github.com/jak0099/dr.git
102 lines
3.0 KiB
JavaScript
102 lines
3.0 KiB
JavaScript
var ws;
|
||
var websocketUrl = getWsUrl();
|
||
const HEART_BEAT_INTERVAL = 1000;
|
||
const reconnectTime = 5000;
|
||
var lockReconnect = false;
|
||
var heartBeatInterval;
|
||
|
||
function createWs() {
|
||
ws = new WebSocket(websocketUrl);
|
||
ws.addEventListener('open', (event) => {
|
||
console.log('WebSocket is open now.');
|
||
startHeartBeat();
|
||
addMsg("websocket连接成功,当前时间" + new Date().Format("yyyy-MM-dd hh:mm:ss"));
|
||
});
|
||
|
||
ws.addEventListener('message', (event) => {
|
||
console.log('Message from server: ', event.data);
|
||
if (event.data != 'HEARTBEAT') addMsg(event.data);
|
||
});
|
||
|
||
ws.addEventListener('error', (error) => {
|
||
console.error('WebSocket encountered error: ', error);
|
||
let msg = "websocket发生错误,连接状态码:" + ws.readyState;
|
||
addMsg(msg);
|
||
reconnect();
|
||
});
|
||
|
||
ws.addEventListener('close', (event) => {
|
||
console.log('WebSocket is closed now.');
|
||
addMsg('websocket连接关闭');
|
||
if (heartBeatInterval) clearInterval(heartBeatInterval);
|
||
reconnect();
|
||
});
|
||
}
|
||
|
||
function getWsUrl() {
|
||
let host = location.host;
|
||
let protocol = 'ws';
|
||
let port = location.port;
|
||
return protocol + '://' + host;
|
||
}
|
||
|
||
function reconnect() {
|
||
if (!lockReconnect) {
|
||
lockReconnect = true;
|
||
setTimeout(function () {
|
||
addMsg("正在重连,当前时间" + new Date().Format("yyyy-MM-dd hh:mm:ss"));
|
||
createWs();
|
||
lockReconnect = false;
|
||
}, reconnectTime);
|
||
}
|
||
}
|
||
|
||
function addMsg(msg){
|
||
let f = $('#filter').val();
|
||
if (f.length > 0 && msg.indexOf(f) <= 0) {
|
||
return;
|
||
}
|
||
if(msg && !msg.endsWith('<br>')) {
|
||
msg += '<br>';
|
||
}
|
||
$("#msg").append(msg);
|
||
$("#log").scrollTop($("#log").prop("scrollHeight"));
|
||
}
|
||
|
||
function startHeartBeat() {
|
||
if (ws.readyState === 1) {
|
||
ws.send('HEARTBEAT');
|
||
// console.log('send HEARTBEAT');
|
||
}
|
||
heartBeatInterval = setInterval(() => {
|
||
if (ws.readyState === 1) {
|
||
ws.send('HEARTBEAT');
|
||
// console.log('send HEARTBEAT');
|
||
}
|
||
}, HEART_BEAT_INTERVAL);
|
||
}
|
||
|
||
Date.prototype.Format = function (fmt) {
|
||
var o = {
|
||
"M+": this.getMonth() + 1, // 月份
|
||
"d+": this.getDate(), // 日
|
||
"h+": this.getHours(), // 小时
|
||
"m+": this.getMinutes(), // 分
|
||
"s+": this.getSeconds(), // 秒
|
||
"q+": Math.floor((this.getMonth() + 3) / 3), // 季度
|
||
"S": this.getMilliseconds() // 毫秒
|
||
};
|
||
if (/(y+)/.test(fmt))
|
||
fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
|
||
for (var k in o)
|
||
if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
|
||
return fmt;
|
||
}
|
||
|
||
$(document).ready(function() {
|
||
$('#clearLog').click(function () {
|
||
$("#msg").html('');
|
||
});
|
||
addMsg('websocket初始化中,当前ws服务地址=> ' + websocketUrl);
|
||
createWs();
|
||
}); |