238 lines
6.5 KiB
JavaScript
238 lines
6.5 KiB
JavaScript
|
||
|
||
|
||
import https from '@/https';
|
||
import server from './actions/server.js';
|
||
import Pomelo from './pomelo/Pomelo.js';
|
||
import ToolsBase from './tools/ToolsBase.js';
|
||
import storage, { actions } from '../utils/storage';
|
||
import { useUserStoreWithOut } from '@/stores/modules/user';
|
||
import { useGameStoreWithOut } from '@/stores/modules/game';
|
||
import Notify from './notify.js';
|
||
import { closeLoading, toast } from "@/utils/toast";
|
||
// import router from '@/router';
|
||
// import emitter from "@/utils/eventBus";
|
||
|
||
const pomeloCenter = Pomelo();
|
||
const pomeloMsg = Pomelo();
|
||
|
||
export default class extends ToolsBase {
|
||
|
||
constructor() {
|
||
super()
|
||
this.userInfo = {};
|
||
this.token = '';
|
||
this.msg = {};
|
||
/**
|
||
* 发送请求
|
||
* @param {String} url 路由
|
||
* @param {any} params 参数
|
||
*/
|
||
this.request = (url, params = {}) => {
|
||
return new Promise((reslove, reject) => {
|
||
pomeloCenter.request(url, params, (res) => {
|
||
reslove(res)
|
||
})
|
||
})
|
||
}
|
||
/**
|
||
* 注册事件
|
||
* @param {String} event 事件名称
|
||
*/
|
||
this.on = (url) => {
|
||
return new Promise((reslove, reject) => {
|
||
pomeloMsg.on(url, res => {
|
||
reslove(res)
|
||
})
|
||
})
|
||
}
|
||
/**
|
||
* 通知请求
|
||
* @param {String} url 路由
|
||
* @param {any} params 参数
|
||
*/
|
||
this.notify = (url, params = {}) => {
|
||
return new Promise((reslove, reject) => {
|
||
pomeloCenter.notify(url, params, (res) => {
|
||
reslove(res)
|
||
})
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 下线通知
|
||
*/
|
||
// pomeloCenter.on(this.cfg.global.EVENT_NAME.ON_KICK, res => {
|
||
// console.log(res, '-----下线通知-----1');
|
||
// storage.clearStorage();
|
||
// storage.removeSessionStorage(actions.HOME_POSITION);
|
||
// useUserStoreWithOut().clearUser();
|
||
// useGameStoreWithOut().clearGameUrl();
|
||
// emitter.emit("closeGame");
|
||
// router.replace("/login");
|
||
// // this.connectMsg()
|
||
// })
|
||
}
|
||
|
||
/**
|
||
* 连接前
|
||
* @returns
|
||
*/
|
||
beforeConnect() {
|
||
this.userInfo = JSON.parse(storage.getStorage(actions.USER_INFO)) || {}
|
||
this.token = storage.getStorage(actions.USER_TOEKN) || ''
|
||
this.msg = {
|
||
// 建立连接后调用entry方法前验证,并且成功后session绑定uid
|
||
uid: this.userInfo.uid,
|
||
token: this.token,
|
||
lang: 'pt'
|
||
}
|
||
// this.connectMsg().then(() => {
|
||
// new Notify(pomeloMsg)
|
||
// })
|
||
// return new Promise((reslove, reject) => {
|
||
// try {
|
||
// this.connectCenter().then((status) => {
|
||
// if (!status) {
|
||
// reslove(false)
|
||
// }
|
||
// reslove(true)
|
||
// })
|
||
// } catch (error) {
|
||
// console.log(error, '??????socket 连接失败')
|
||
// }
|
||
|
||
// })
|
||
}
|
||
|
||
|
||
/**
|
||
* 已登录准备链接
|
||
*/
|
||
connect() {
|
||
return new Promise((reslove, reject) => {
|
||
Promise.all([this.connectMsg()]).then((res) => {
|
||
if (res[0] && res[1]) {
|
||
reslove(true)
|
||
}
|
||
reslove(false)
|
||
})
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 连接中心服务器Url
|
||
*/
|
||
connectCenter() {
|
||
this.beforeConnect()
|
||
return new Promise((reslove, reject) => {
|
||
https.getCenterUrl().then(res => {
|
||
if (res.code !== this.cfg.code.OK) {
|
||
// router.replace("/login");
|
||
reslove(false)
|
||
return
|
||
}
|
||
|
||
const params = this.setParams(res.data.url)
|
||
pomeloCenter.createConnect(server.centerRoute, params, this.msg, (ress) => {
|
||
// console.log('-----center连接成功-----', ress)
|
||
// 如果上次的连接只是踢下线,不再重新建立连接,直接登录
|
||
if (ress.code === this.cfg.code.C1044.CODE) {
|
||
this.request(server.centerRoute, this.msg).then(() => {
|
||
reslove(true)
|
||
});
|
||
return;
|
||
};
|
||
|
||
// if (ress.code == this.cfg.code.C15.CODE || ress.code == this.cfg.code.C14.CODE) {
|
||
// closeLoading()
|
||
// toast(ress.txt)
|
||
// storage.clearStorage()
|
||
// useUserStoreWithOut().clearUser()
|
||
// this.disconnect()
|
||
// reslove(false)
|
||
// return
|
||
// }
|
||
|
||
if (ress.code !== this.cfg.code.OK) {
|
||
closeLoading()
|
||
toast(ress.txt)
|
||
storage.clearStorage()
|
||
storage.removeSessionStorage(actions.HOME_POSITION);
|
||
useUserStoreWithOut().clearUser()
|
||
useGameStoreWithOut().clearGameUrl();
|
||
this.disconnect()
|
||
reslove(false)
|
||
return
|
||
};
|
||
reslove(true)
|
||
})
|
||
})
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 连接消息服务器url
|
||
*/
|
||
connectMsg() {
|
||
this.beforeConnect()
|
||
return new Promise((reslove, reject) => {
|
||
console.log(https);
|
||
https.getMsgServer().then((res) => {
|
||
if (res.code !== this.cfg.code.OK) {
|
||
// router.replace("/login");
|
||
reslove(false)
|
||
return
|
||
}
|
||
const params = this.setParams(res.data.url, 'Msg', 20)
|
||
pomeloMsg.createConnect(server.messageRoute, params, this.msg, ress => {
|
||
if (ress.code !== this.cfg.code.OK) {
|
||
// 有可能Center服务器断线了,3秒后重试
|
||
setTimeout(() => {
|
||
this.connectMsg();
|
||
}, 3000);
|
||
return;
|
||
};
|
||
// !JSON.parse(import.meta.env.VITE_OPEN_CONSOLE) ? toast('message connect') : null
|
||
new Notify(pomeloMsg)
|
||
reslove(true)
|
||
})
|
||
})
|
||
})
|
||
|
||
}
|
||
|
||
disconnect() {
|
||
pomeloCenter.disconnect('discount center');
|
||
pomeloMsg.disconnect('discount msg');
|
||
}
|
||
|
||
disconnectMsg() {
|
||
pomeloMsg.disconnect('discount msg');
|
||
}
|
||
|
||
/**
|
||
* 设置连接参数
|
||
* @param {String} url 获取服务器url
|
||
* @param {String} serverName 名称 Center Msg
|
||
* @param {Number} maxReconnectAttempts 最大重连次数
|
||
*/
|
||
setParams(url, serverName = 'Center', maxReconnectAttempts = 5) {
|
||
return {
|
||
url,
|
||
reconnect: true,
|
||
maxReconnectAttempts,
|
||
serverName: serverName,
|
||
serverTime: this.serverTime,
|
||
// 建立连接之前验证
|
||
uid: this.userInfo.uid ? this.userInfo.uid : undefined,
|
||
token: this.token ? this.token : undefined,
|
||
// 消息加解密方法
|
||
enData: this.enData.bind(this),
|
||
deData: this.deData.bind(this),
|
||
cert: JSON.parse(import.meta.env.VITE_SOCKET_CERT)
|
||
}
|
||
}
|
||
}
|
||
|