SDKRecordsData.js 5.25 KB
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getSDKRecord = exports.uploadSDKRecord = exports.downloadSDKRecordV2 = exports.downloadSDKRecord = void 0;
const SDKServer_1 = require("./SDKServer");
const TimeManager_1 = require("./TimeManager");
const SDKEvents_1 = require("./SDKEvents");
const SDKBase_1 = require("./SDKBase");
const _1 = require(".");
let sdkRecords = { sdk: {}, game: {} };
let gameId;
let headers;
async function downloadSDKRecord(_gameId, _headers) {
    gameId = _gameId;
    headers = _headers;
    let tryCount = 0;
    while (tryCount < 5) {
        try {
            console.log("downloadSDKRecord tryCount = ", tryCount);
            let response = await SDKServer_1.default.mapleServer.post("/maple/client/v1/archive/download", 5000, JSON.stringify({ game_id: gameId }), "application/json", headers);
            let data = JSON.parse(response);
            console.log('拉取服务器存档:', data);
            if ("0" === data["code"] && data["obj"] && data["obj"]["data"]) {
                console.log("valid record succeed");
                sdkRecords = data["obj"]["data"];
                if (!sdkRecords.game) { // 兼容之前存档格式
                    sdkRecords = { sdk: {}, game: sdkRecords };
                }
                sdkRecords.sdk = sdkRecords.sdk || {};
                console.log("sdkRecords.sdk = ", sdkRecords.sdk);
            }
            break;
        }
        catch (e) {
            console.error(e);
        }
        tryCount++;
    }
}
exports.downloadSDKRecord = downloadSDKRecord;
/**token错误 */
var ETokenErrorCode;
(function (ETokenErrorCode) {
    ETokenErrorCode[ETokenErrorCode["TokenInvalid"] = -1001] = "TokenInvalid";
    ETokenErrorCode[ETokenErrorCode["TokenExpired"] = -1002] = "TokenExpired";
})(ETokenErrorCode || (ETokenErrorCode = {}));
async function downloadSDKRecordV2(_gameId, url, _headers) {
    gameId = _gameId;
    headers = _headers;
    let tryCount = 0;
    let err = false;
    while (tryCount < 5) {
        try {
            // console.log("downloadSDKRecord tryCount = ", tryCount);
            let downloadRecordStr = await SDKServer_1.default.downloadRecordServerHttp.get(url, 5000, headers);
            // console.log("downloadRecord response = ", downloadRecordStr);
            if (downloadRecordStr && "" !== downloadRecordStr.trim()) {
                let downloadRecordJson = JSON.parse(downloadRecordStr);
                if (downloadRecordJson && downloadRecordJson["body"]) {
                    sdkRecords = downloadRecordJson["body"];
                    if (!sdkRecords.game) { // 兼容之前存档格式
                        sdkRecords = { sdk: {}, game: sdkRecords };
                    }
                    sdkRecords.sdk = sdkRecords.sdk || {};
                    // console.log("sdkRecords.sdk = ", sdkRecords.sdk);
                    return true;
                }
                else if (ETokenErrorCode.TokenExpired === downloadRecordJson["code"] || ETokenErrorCode.TokenInvalid === downloadRecordJson["code"]) {
                    console.log("ETokenErrorCode.TokenExpired || ETokenErrorCode.TokenInvalid ");
                    err = true;
                }
            }
            else {
                console.log("downloadSDKRecordV2 error", downloadRecordStr);
                err = true;
            }
            if (err) {
                return false;
            }
        }
        catch (e) {
            console.error(e);
        }
        tryCount++;
    }
}
exports.downloadSDKRecordV2 = downloadSDKRecordV2;
async function uploadSDKRecord(record) {
    Object.assign(sdkRecords, record);
    sdkRecords.sdk["game_time"] = TimeManager_1.TimeManager.getTimeRecord();
    if (SDKBase_1.V2) {
        let url = SDKBase_1.SDKConfigV2.debug ? SDKBase_1.SDKConfigV2.localServerRecordServiceUrlDEV : SDKBase_1.SDKConfigV2.localServerRecordServiceUrlRELEASE;
        let logininfo = _1.SDK.getLoginInfo();
        let data = {
            "appId": SDKBase_1.SDKConfigV2.gameId,
            "appName": SDKBase_1.SDKConfigV2.gameName,
            "userId": logininfo.playerId,
            "platformId": logininfo.playerId,
            "body": sdkRecords
        };
        let uploadRecordStr = await SDKServer_1.default.uploadRecordServerHttp.post(url, 5000, JSON.stringify(data), "application/json", { "Authorization": `Bearer ${logininfo.localServerRecordServiceToken}` });
        console.log("uploadRecord response = ", uploadRecordStr);
        if (uploadRecordStr && "" !== uploadRecordStr.trim()) {
            let jsonObj = JSON.parse(uploadRecordStr);
            if (ETokenErrorCode.TokenExpired === jsonObj["code"] || ETokenErrorCode.TokenInvalid === jsonObj["code"]) {
                await _1.SDK.refreshLocalServerToken();
                uploadSDKRecord(record);
            }
        }
    }
    else {
        let response = await SDKServer_1.default.mapleServer.post("/maple/client/v1/archive/upload/all", 5000, JSON.stringify({ game_id: gameId, data: sdkRecords }), "application/json", headers);
        console.log("Upload record response", response);
    }
}
exports.uploadSDKRecord = uploadSDKRecord;
function getSDKRecord() {
    return sdkRecords;
}
exports.getSDKRecord = getSDKRecord;
SDKEvents_1.SDKEvents.OnTimeSync.on(() => {
    uploadSDKRecord({});
});