|
|
import configService from '@/common/service/config.service.js';
|
|
|
import store from '@/store/index.js';
|
|
|
class socket {
|
|
|
constructor(options) {
|
|
|
this.socketUrl = configService.apiUrl;
|
|
|
this.socketStart = false;
|
|
|
this.monitorSocketError();
|
|
|
this.monitorSocketClose();
|
|
|
this.socketReceive();
|
|
|
}
|
|
|
init(socket_type,callback) {
|
|
|
const _this = this;
|
|
|
if (configService.apiUrl) {
|
|
|
if(this.socketStart){
|
|
|
console.log('webSocket已经启动了');
|
|
|
}else{
|
|
|
let userid=store.state.userid?store.state.userid:store.getters.userid;
|
|
|
let url=this.socketUrl.replace("https://","wss://").replace("http://","ws://")+"/"+socket_type+"/"+userid+"_app";
|
|
|
console.log("启动this.socketUrl连接地址:",url);
|
|
|
|
|
|
uni.connectSocket({
|
|
|
url: url,
|
|
|
method: 'GET'
|
|
|
});
|
|
|
uni.onSocketOpen((res) => {
|
|
|
this.socketStart = true;
|
|
|
callback && callback();
|
|
|
console.log('WebSocket连接已打开!');
|
|
|
});
|
|
|
/*setTimeout(() => {
|
|
|
_this.getHeartbeat();
|
|
|
}, 5000);*/
|
|
|
}
|
|
|
}else{
|
|
|
console.log('config/baseUrl socketUrl为空');
|
|
|
}
|
|
|
}
|
|
|
//Socket给服务器发送消息
|
|
|
send(data, callback) {
|
|
|
const _this = this;
|
|
|
if (store.state.userid) {
|
|
|
data.userUid =store.state.userid;
|
|
|
}
|
|
|
console.log(data);
|
|
|
uni.sendSocketMessage({
|
|
|
data: JSON.stringify(data),
|
|
|
success: () => {
|
|
|
callback && callback(true);
|
|
|
},
|
|
|
fail: () => {
|
|
|
callback && callback(false);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
//Socket接收服务器发送过来的消息
|
|
|
socketReceive() {
|
|
|
const _this = this;
|
|
|
uni.onSocketMessage(function(res) {
|
|
|
console.log("APP:----》收到服务器内容:",res);
|
|
|
let data = JSON.parse(res.data);
|
|
|
//console.log('收到服务器内容:', data);
|
|
|
_this.acceptMessage && _this.acceptMessage(data);
|
|
|
});
|
|
|
}
|
|
|
//关闭Socket
|
|
|
closeSocket() {
|
|
|
const _this = this;
|
|
|
uni.closeSocket();
|
|
|
_this.socketStart = false;
|
|
|
}
|
|
|
//监听Socket关闭
|
|
|
monitorSocketClose() {
|
|
|
const _this = this;
|
|
|
uni.onSocketClose(function(res) {
|
|
|
console.log('WebSocket 已关闭!');
|
|
|
_this.socketStart = false;
|
|
|
setTimeout(function() {
|
|
|
//_this.init();
|
|
|
}, 3000);
|
|
|
});
|
|
|
}
|
|
|
//监听Socket错误
|
|
|
monitorSocketError() {
|
|
|
const _this = this;
|
|
|
uni.onSocketError(function(res) {
|
|
|
_this.socketStart = false;
|
|
|
console.log('WebSocket连接打开失败,请检查!');
|
|
|
});
|
|
|
}
|
|
|
//心跳
|
|
|
getHeartbeat() {
|
|
|
const _this = this;
|
|
|
this.send({
|
|
|
type: "心跳",
|
|
|
userUid: store.state.userid
|
|
|
}, (val) => {
|
|
|
setTimeout(() => {
|
|
|
if (val) {
|
|
|
//_this.getHeartbeat();
|
|
|
} else {
|
|
|
if(!_this.socketStart){
|
|
|
//_this.init();
|
|
|
}
|
|
|
}
|
|
|
}, 10000);
|
|
|
});
|
|
|
}
|
|
|
};
|
|
|
const mySocket = new socket();
|
|
|
export default mySocket;
|