| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- const extConfig = wx.getExtConfigSync ? wx.getExtConfigSync() : {}
- const SocketConfig = {
- retry: 20,
- timeout: 10000,
- timeHandler: null,
- reset: function() {
- clearTimeout(this.timeHandler);
- this.timeHandler = null;
- return this;
- },
- start: function(send) {
- this.timeHandler = setTimeout(() => {
- send && send();
- this.reset().start(send);
- }, this.timeout);
- }
- };
- class SocketUtil {
- constructor({ url, onOpen, onMessage, onClose, onError }) {
- this.url = url || `${extConfig.socketApiHost}:8282`;
- this.socket = this.connectSocket(this.url);
- this.onOpenCall = onOpen;
- this.onMessageCall = onMessage;
- this.onCloseCall = onClose;
- this.onErrorCall = onError;
- this.retryTime = 0;
- this.reconnectHandler = null;
- this.lockReconnect = false;
- this.bindHandlerEvent();
- // uni.onSocketOpen(function(res) {
- // console.log("WebSocket连接已打开!");
- // });
- // uni.onSocketMessage(function(res) {
- // console.log("收到服务器内容:" + res.data);
- // });
- // uni.onSocketOpen(function() {
- // uni.closeSocket();
- // });
- }
- bindHandlerEvent() {
- this.socket.onOpen(this.openSocket);
- // 监听消息
- this.socket.onMessage(this.onMessageSocket);
- // 监听Socket的关闭
- this.socket.onClose(this.closeSocket);
- this.socket.onError(this.errorSocket);
- }
- connectSocket(url) {
- let path = `ws://${url}`;
- // #ifdef MP-WEIXIN
- path = `wss://${url}`;
- // #endif
- const task = uni.connectSocket({
- url: path,
- complete: () => {}
- });
- return task;
- }
- openSocket = event => {
- console.log("contact ok", event);
- SocketConfig.reset().start(() => {
- this.send("ping");
- });
- this.onOpenCall && this.onOpenCall(event);
- };
- onMessageSocket = data => {
- console.log("Client received a message", data);
- SocketConfig.reset().start(() => {
- this.send("ping");
- });
- try {
- let info = JSON.parse(data.data);
- this.onMessageCall && this.onMessageCall(info);
- } catch (error) {}
- };
- errorSocket(err) {
- console.log("contact error", err);
- this.onErrorCall && this.onErrorCall(err);
- }
- closeSocket() {
- console.log("Client notified socket has closed");
- this.onCloseCall && this.onCloseCall();
- }
- send(data) {
- this.socket.send({
- data: JSON.stringify(data)
- });
- }
- colse() {
- this.socket.close();
- }
- reconnect() {
- if (this.lockReconnect) return;
- this.lockReconnect = true;
- clearTimeout(this.reconnectHandler);
- if (this.retryTime < SocketConfig.retry) {
- this.reconnectHandler = setTimeout(() => {
- this.socket = this.connectSocket(this.url);
- this.bindHandlerEvent();
- this.lockReconnect = false;
- }, 5000);
- this.retryTime++;
- }
- }
- }
- export default SocketUtil;
|