TimeManager.js
3.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
"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 = {}));