18n/src/socket/Controller.js
2024-10-29 18:27:23 +08:00

238 lines
6.5 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
}
}
}