electron-egg webSocket使用封装
websocket.js
class WebSocketUtil {
/**
*
* @param {*} deviceCode
* @param {*} reconnectDelay
* @param {*} isLog
*/
constructor(url, reconnectDelay) {
this.socket = null;
this.socketUrl = url;
this.onSendCallback = null;
this.onOpenCallback = null;
this.onMessageCallback = null;
this.onCloseCallback = null;
this.onErrorCallback = null;
this.onReconnectCallback = null;
this.reconnectDelay = reconnectDelay; // 重连延迟时间,单位为毫秒
this.isReconnect = true; // 是否重连,自动关闭设置为false
this.isLog = false;//打印
}
socketListener(onOpen, onMessage, onSend, onClose, onError, onReconnect) {
this.onOpenCallback = onOpen;
this.onMessageCallback = onMessage;
this.onSendCallback = onSend;
this.onCloseCallback = onClose;
this.onErrorCallback = onError;
this.onReconnectCallback = onReconnect;
}
socketConnect() {
if (this.socketIsConnect()) {
return
}
this.isReconnect = true//设置为true
this.socket = new WebSocket(this.socketUrl);
this.socket.onopen = () => {
if (this.isLog) {
console.log('WebSocketUtil--WebSocket连接已打开');
}
if (typeof this.onOpenCallback === 'function') {
this.onOpenCallback();
}
};
this.socket.onmessage = (event) => {
if (this.isLog) {
console.log('WebSocketUtil--收到消息:', event.data);
}
if (typeof this.onMessageCallback === 'function') {
this.onMessageCallback(event);
}
};
this.socket.onclose = () => {
if (this.isLog) {
console.log('WebSocketUtil--WebSocket连接已关闭');
}
if (typeof this.onCloseCallback === 'function') {
this.onCloseCallback();
}
//是否重连
if (this.isReconnect && !this.socketIsConnect()) {
this.socketReConnect()
}
};
this.socket.onerror = (error) => {
if (this.isLog) {
console.error('WebSocketUtil--WebSocket连接发生错误:', error);
}
if (typeof this.onErrorCallback === 'function') {
this.onErrorCallback(error);
}
// //是否重连
// if (this.isReconnect) {
// this.reConnect()
// }
};
}
/**
* 发送消息
* @param {*} message
* @param {*} onSend
*/
socketSend(message, onSend) {
var isSuccess = false
var error = ""
if (this.socketIsConnect()) {
const msg = JSON.stringify(message);
const sendResult = this.socket.send(msg);
if (sendResult == undefined) {
if (this.isLog) {
console.log('WebSocketUtil--消息发送成功:', msg);
}
isSuccess = true
} else {
if (this.isLog) {
console.error('WebSocketUtil--消息发送失败', msg);
}
isSuccess = false
}
} else {
if (this.isLog) {
console.error('WebSocketUtil--WebSocket连接未建立或已关闭');
}
error = "连接未建立或已关闭"
isSuccess = false
}
if (typeof this.onSendCallback === 'function') {
this.onSendCallback(message, isSuccess, error)
}
if (typeof onSend === 'function') {
onSend(message, isSuccess, error);
}
}
/**
* 关闭
*/
socketClose() {
this.isReconnect = false
if (this.socketIsConnect()) {
this.socket.close();
} else {
if (this.isLog) {
console.error('WebSocketUtil--WebSocket连接未建立或已关闭');
}
}
}
/**
*
*/
socketReConnect() {
if (this.socketIsConnect()) {
return
}
if (this.isLog) {
console.error('WebSocketUtil--reConnect');
}
if (typeof this.onReconnectCallback === 'function') {
this.onReconnectCallback();
}
setTimeout(() => {
if (!this.socketIsConnect() && this.isReconnect) {
this.socket.close();
this.socketConnect();
}
}, this.reconnectDelay);
}
socketIsConnect() {
var isC = false;
if (this.socket != null && this.socket.readyState === WebSocket.OPEN) {
isC = true
}
return isC;
}
}
export default WebSocketUtil;
使用
import WebSocketUtil from '../api/websocket.js';
initWebSocket(deviceCode) {
this.websocket = new WebSocketUtil(api.webSocketUrl + deviceCode, 3000);
const self = this;
this.websocket.socketListener(
function onOpen() {
console.log('连接已经打开');
self.socketTips = "已连接"
},
function onMessage(event) {
var aaa = JSON.parse(event.data)
console.log('收到消息', aaa, aaa.sysMsgType);
},
function onSend(msg, isSuccess, error) {
if (isSuccess) {
console.log('消息发送成功:', msg);
} else {
console.log('消息发送失败:', msg);
}
},
function onClose() {
console.log('连接已经关闭');
self.socketTips = "连接关闭"
},
function onError(error) {
console.log('连接出现错误:', error);
},
function onReconnect() {
console.log('---重连中---:');
self.socketTips = "重连中"
},
);
this.websocket.socketConnect();
},
(图片来源网络,侵删)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
