kana-bbs/assets/js/socket.js
2022-01-31 14:21:50 +08:00

46 lines
1.4 KiB
JavaScript

const that = {
controller: new Map(),
connection: null,
onclose: null,
onerror: null,
onopen: null,
onmessage: null,
delay: 0,
init: (link) => {
that.connection = new WebSocket(link)
that.connection.onopen = (event) => {
that.delay = 0
console.log("Open connection")
that.connection.send(JSON.stringify({ fm: "chat", data: `Link Start! ${that.delay}` }))
// 检查消息版本, 从最后时间向前查20条
// 当向上滚动时, 从本地最早时间向前查询20条
// 落日志与合并日志
if (that.onopen) that.onopen();
}
that.connection.onmessage = (event) => {
console.log("[message]", event.data)
let data = JSON.parse(event.data)
console.log(event.data, "xxxxxxxxxxxxxx")
let call = that.controller.get(data.fm)
if (call) call(data)
if (that.onmessage) that.onmessage();
}
that.connection.onclose = (event) => {
if (event.wasClean) {
console.log(`[close] code=${event.code} reason=${event.reason}`);
} else {
that.delay++
console.log(`[close] 连接中断${that.delay}第次, 尝试重连(延时${that.delay} s)`);
setTimeout(that.init(link), that.delay * 1000)
}
if (that.onclose) that.onclose()
};
that.connection.onerror = (error) => {
console.log(`[error] ${error.message}`);
if (that.onerror) that.onerror()
};
}
}
export default that