TimeManager.js 3.73 KB
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TimeManager = void 0;
const SDKServer_1 = require("./SDKServer");
const SDKEvents_1 = require("./SDKEvents");
const SDKBase_1 = require("./SDKBase");
var TimeManager;
(function (TimeManager) {
    let loginTime = 0;
    let currDate = 0;
    let todayGameTime = 0;
    let todayGameFromZero = false;
    let totalGameTime = 0;
    let timeOffset = 0;
    let useLocalTime = false;
    let lastSyncTime = 0;
    async function init(_useLocalTime) {
        useLocalTime = _useLocalTime;
    }
    TimeManager.init = init;
    async function onLogin(sdkRecord) {
        console.log("TimeManager onLogin,start to syncTime");
        await syncTime();
        loginTime = getTime();
        let time = new Date(loginTime);
        currDate = time.getDate();
        if (sdkRecord["game_time"]) {
            let timeStr = `${time.getFullYear()}${time.getMonth()}${time.getDate()}`;
            todayGameTime = sdkRecord["game_time"][timeStr];
            totalGameTime = sdkRecord["game_time"]["total"];
        }
        setInterval(() => {
            syncTime();
        }, 30000);
    }
    TimeManager.onLogin = onLogin;
    function getTimeRecord() {
        let time = new Date(getTime());
        let timeStr = `${time.getFullYear()}${time.getMonth()}${time.getDate()}`;
        let ret = {
            total: getTotalGameTime()
        };
        ret[timeStr] = getTodayGameTime();
        return ret;
    }
    TimeManager.getTimeRecord = getTimeRecord;
    function getGameTime() {
        return getTime() - loginTime - appInBgDuration;
    }
    TimeManager.getGameTime = getGameTime;
    function getTodayGameTime() {
        let time = new Date(loginTime);
        let date = time.getDate();
        if (!todayGameFromZero && currDate !== date) {
            currDate = date;
            todayGameFromZero = true;
        }
        if (todayGameFromZero) { // 登录后跨天
            return (time.getHours() * 3600 + time.getMinutes() * 60 + time.getSeconds()) * 1000;
        }
        return todayGameTime + getGameTime();
    }
    TimeManager.getTodayGameTime = getTodayGameTime;
    function getTotalGameTime() {
        return totalGameTime + getGameTime();
    }
    TimeManager.getTotalGameTime = getTotalGameTime;
    function getTime() {
        return Date.now() + timeOffset;
    }
    TimeManager.getTime = getTime;
    async function syncTime() {
        console.log("syncTime");
        if (useLocalTime) {
            SDKEvents_1.SDKEvents.OnTimeSync.emit();
            console.log("syncTime useLocalTime, will return");
            return;
        }
        let l1 = lastSyncTime = Date.now();
        console.log("syncTime gettime from server ");
        let ret = JSON.parse(await SDKServer_1.default.timeServer.get(""));
        if (SDKBase_1.V2) {
            if (ret["time"]) {
                let s = ret["time"];
                let l2 = Math.round((Date.now() + l1) / 2 / 1000) * 1000;
                timeOffset = s - l2;
            }
        }
        else {
            if (ret.code === "0") {
                let s = ret.obj.unix_time * 1000;
                let l2 = Math.round((Date.now() + l1) / 2 / 1000) * 1000;
                timeOffset = s - l2;
            }
        }
        SDKEvents_1.SDKEvents.OnTimeSync.emit();
    }
    TimeManager.syncTime = syncTime;
    let appHideTime = 0;
    let appInBgDuration = 0;
    SDKEvents_1.SDKEvents.AppHide.on(() => {
        appHideTime = getTime();
    });
    SDKEvents_1.SDKEvents.AppShow.on(async () => {
        await syncTime();
        if (appHideTime > 0) {
            appInBgDuration += getTime() - appHideTime;
            appHideTime = 0;
        }
    });
})(TimeManager = exports.TimeManager || (exports.TimeManager = {}));