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