49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
import { LogLevel, WsClient, WsClientStatus } from 'tsrpc';
|
||
import { serviceProto } from './cross/protocols/serviceProto';
|
||
import { ChatFun } from './public/chat';
|
||
|
||
/**创建跨服连接对象 */
|
||
export async function createWsClient() {
|
||
|
||
G.clientCross = new WsClient(serviceProto, {
|
||
server: G.config.corssWsUrl,
|
||
logLevel: G.argv.logModel as LogLevel,
|
||
json: true,
|
||
timeout:15000,
|
||
|
||
// 心跳检测,防止长时间无交互tcp协议被挂起
|
||
heartbeat: {
|
||
// 两次心跳检测的间隔时间(毫秒)
|
||
interval: 8000,
|
||
// 发出心跳检测包后,多长时间未收到回复视为超时(毫秒),超时将使连接断开
|
||
timeout: 40000
|
||
}
|
||
});
|
||
let result = await G.clientCross.connect();
|
||
if (!result.isSucc) return console.log('connect cross server fail: ', result.errMsg);
|
||
else console.log(`connect cross server succ at ${G.config.corssWsUrl}`);
|
||
|
||
G.clientCross.listenMsg('msg_cross/CrossChat', sendData => {
|
||
//收到跨服推过来的“世界”聊天
|
||
ChatFun.newMsg(sendData);
|
||
});
|
||
}
|
||
|
||
let count = 0;
|
||
/**
|
||
* SchedulerManage.start里,每1秒会在调用这个方法一次
|
||
*/
|
||
export function checkCrossWsIsDisconnect() {
|
||
count++;
|
||
if (count == 5) {
|
||
//每5s判断一次是否需要重连
|
||
if (G.config.corssWsUrl && G.clientCross?.status == WsClientStatus.Closed) {
|
||
try {
|
||
G.clientCross.connect();
|
||
} catch (error) {
|
||
|
||
}
|
||
}
|
||
count = 0;
|
||
}
|
||
} |