123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- (function() {
- var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
- var __module = nodeEnv ? module : {exports:{}};
- var __filename = 'preview-scripts/assets/script/network/Network.js';
- var __require = nodeEnv ? function (request) {
- return cc.require(request);
- } : function (request) {
- return __quick_compile_project__.require(request, __filename);
- };
- function __define (exports, require, module) {
- if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
- cc._RF.push(module, 'dae33D4UF5ANaX3IZ7bwmD3', 'Network');
- // script/network/Network.ts
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var StringMap_1 = require("../Collections/StringMap");
- var gameCfg_1 = require("../common/gameCfg");
- var Xyc_1 = require("../common/Xyc");
- var Xys_1 = require("../common/Xys");
- var Config_1 = require("../Config");
- var EventConst_1 = require("../data/const/EventConst");
- var GameDataCenter_1 = require("../data/GameDataCenter");
- var EventMng_1 = require("../manager/EventMng");
- var HttpRequest_1 = require("./HttpRequest");
- var SevDataMng_1 = require("./SevDataMng");
- var Network = /** @class */ (function () {
- function Network() {
- this.leftSevbacks = [];
- this.stopRequest = false; //后端提示重启后停止发送协议
- this.stopPopEp = false; //处理装备的属性变化不飘字
- this.isEpChange = false;
- this.isOutClub = false; // 是否退出公会
- this.isShowTimeben = [0, ""]; // 是否打开或刷新福利礼包
- this.cmdCounts = 0; //网络请求计数
- this.m_Timers = new StringMap_1.StringMap();
- }
- Network.prototype.getLoginUrl = function (url) {
- var realUrl = gameCfg_1.default.packageInfo.getItem(Config_1.default.pid).wayhttp + url +
- "?version=" + Config_1.default.appVersion +
- "&time=" + GameDataCenter_1.default.time.sevTime;
- return realUrl;
- };
- Network.prototype.getCmdUrl = function (url, cmdId) {
- var realUrl = gameCfg_1.default.packageInfo.getItem(Config_1.default.pid).wayhttp + url +
- "?uuid=" + GameDataCenter_1.default.user.uuid +
- "&token=" + GameDataCenter_1.default.user.token +
- "&version=" + Config_1.default.appVersion +
- "&cmdId=" + cmdId +
- "&time=" + GameDataCenter_1.default.time.sevTime;
- return realUrl;
- };
- // 不需要处理回调数据的,走这里
- Network.POST_SPECIAL = function (path, body, cb) {
- if (cb === void 0) { cb = function () { }; }
- var r = new XMLHttpRequest();
- r.open("POST", path, true);
- r.timeout = 15000;
- r.setRequestHeader("Content-Type", "application/json");
- r.onreadystatechange = function () {
- if (r.status >= 200 && r.status <= 400 && r.readyState == 4) {
- cb();
- }
- };
- r.send(body);
- };
- Network.prototype.sendLogin = function (url, body, callback) {
- var _this = this;
- if (callback === void 0) { callback = function () { }; }
- HttpRequest_1.default.POST(this.getLoginUrl(url), { uuid: GameDataCenter_1.default.user.uuid, version: Config_1.default.appVersion, url: url }, body, function (result) {
- _this.updateSevBack(result, callback);
- }, true);
- };
- Network.prototype.send = function (url, body, cb1, cb2, deal, needWait, cmdId) {
- var _this = this;
- if (deal === void 0) { deal = 1; }
- if (needWait === void 0) { needWait = false; }
- if (cmdId === void 0) { cmdId = -1; }
- if (this.stopRequest) {
- return;
- }
- //每发送一个消息,消息计数累计,方便服务端做判断
- this.cmdCounts++;
- //先缓存发送的消息,超时重新请求
- var postDataTemp = {
- url: url,
- body: body,
- cb1: cb1,
- cb2: cb2,
- deal: deal,
- cmdId: cmdId == -1 ? this.cmdCounts : cmdId
- };
- var unErrArr = [Xyc_1.PlayerReconnect.url, Xyc_1.UserAdok.url, Xyc_1.UserAdok.url];
- if (unErrArr.indexOf(url) < 0) {
- //重连接口,心跳包, 挂机打怪无需重新发送
- HttpRequest_1.default.errPostMap.Add(url, postDataTemp);
- var unArr = [Xyc_1.PlayerLogin.url, Xyc_1.PlayerLoginPlayer.url, Xyc_1.PlayerLoginUser.url, Xyc_1.HdClubPkFightAll.url, Xyc_1.TaichuWajieMap.url, Xyc_1.ZhangjieDaguai.url];
- if (unArr.indexOf(url) < 0) {
- var postTime = new Date().getTime();
- postDataTemp.postTime = postTime;
- HttpRequest_1.default.curPostMap.Add(url, postDataTemp);
- }
- }
- this.AddTimer(url, function () {
- var curTime = new Date().getTime();
- if (!_this.reSentTime) {
- _this.reSentTime = cc.sys.platform == cc.sys.TAOBAO_MINIGAME ? 3000 : 1500;
- }
- if (HttpRequest_1.default.curPostMap.ContainsKey(url) && curTime - HttpRequest_1.default.curPostMap.Value(url).postTime >= _this.reSentTime) {
- console.log("1.5s\u540E\u91CD\u65B0\u53D1\u9001:" + url);
- //遮罩计数-1
- EventMng_1.default.emit(EventConst_1.NetworkEvent.WAIT, -1);
- _this.m_Timers.Remove(url);
- var value = HttpRequest_1.default.curPostMap.Value(url);
- _this.send(value.url, value.body, value.cb1, value.cb2, value.deal, false, value.cmdId);
- }
- }, 500);
- if (needWait)
- EventMng_1.default.emit(EventConst_1.NetworkEvent.NETWAIT_MASK, true);
- var curCmdId = cmdId == -1 ? this.cmdCounts : cmdId;
- HttpRequest_1.default.POST(this.getCmdUrl(url, curCmdId), { uuid: GameDataCenter_1.default.user.uuid, version: Config_1.default.appVersion, url: url }, body, function (result) {
- if (needWait)
- EventMng_1.default.emit(EventConst_1.NetworkEvent.NETWAIT_MASK, false);
- if (result.type == Xys_1.SevBackType.wu) {
- //无需处理的消息
- return;
- }
- if (cb2) {
- cb2(result);
- }
- if (result.type == Xys_1.SevBackType.fail) {
- // 如果出现异常,则直接处理
- _this.updateSevBack(result, cb1);
- return;
- }
- if (deal == 1) {
- if (_this.leftSevbacks.length > 0) {
- _this.leftSevbacks.push({ cb: cb1, sevback: result });
- }
- else {
- _this.updateSevBack(result, cb1);
- }
- }
- else if (deal == 2) { // 暂存弹窗信息
- if (_this.leftSevbacks.length > 0) {
- _this.leftSevbacks.push({ cb: cb1, sevback: result });
- }
- else {
- var tempSevback = { type: result.type };
- _this.leftSevbacks.push({ cb: function () { }, sevback: tempSevback });
- _this.updateSevBack(result, cb1);
- }
- }
- else {
- _this.leftSevbacks.push({ cb: cb1, sevback: result });
- }
- }, false);
- };
- // 处理暂存的后端数据
- Network.prototype.dealLeftSevback = function () {
- var _this = this;
- this.leftSevbacks.forEach(function (element) {
- _this.updateSevBack(element.sevback, element.cb);
- });
- this.leftSevbacks = [];
- };
- Network.prototype.updateSevBack = function (result, cb1) {
- var _a, _b, _c, _d, _e;
- // 刷新后端数据列表
- var oldPower = (_d = (_c = (_b = (_a = GameDataCenter_1.default.sevBack) === null || _a === void 0 ? void 0 : _a.userInfo) === null || _b === void 0 ? void 0 : _b.a) === null || _c === void 0 ? void 0 : _c.power) !== null && _d !== void 0 ? _d : 0;
- var sevback = SevDataMng_1.default.sevBackUpdate(GameDataCenter_1.default.sevBack, result);
- // 这里去检测通用类数据的前后对比
- this.isOutClub = false;
- this.isShowTimeben = [0, ""];
- GameDataCenter_1.default.sevBack = sevback;
- // if ((!gameMethod.isEmpty(result?.userInfo?.a?.power) || (!gameMethod.isEmpty(result?.userInfo?.u?.power)))) {
- // // 更新战斗力
- // if (GameDataCenter.zhanLi) GameDataCenter.zhanLi.updateTotalZhanLi(oldPower, sevback?.userInfo?.a?.power);
- // }
- // 业务逻辑自定义参数处理
- for (var key in result) {
- var rspModels = GameDataCenter_1.default._rspModel.get(key);
- for (var i = 0; i < (rspModels === null || rspModels === void 0 ? void 0 : rspModels.length); i++) {
- //需要分发事件的模块分发
- (_e = rspModels[i]) === null || _e === void 0 ? void 0 : _e.doSevback(result);
- }
- }
- // 触发事件,刷新UI
- this.updateEvent(result, cb1);
- // 需要在数据处理后触发
- if (this.isOutClub) {
- }
- };
- Network.prototype.updateEvent = function (result, cb1) {
- var _a;
- var alreadyRspModel = []; //已分发的模块,同个消息同个模块只分发一次
- for (var key in result) {
- var rspModels = GameDataCenter_1.default._rspModel.get(key);
- for (var i = 0; i < (rspModels === null || rspModels === void 0 ? void 0 : rspModels.length); i++) {
- if (alreadyRspModel.indexOf(rspModels[i]) >= 0) {
- continue;
- }
- //需要分发事件的模块分发
- (_a = rspModels[i]) === null || _a === void 0 ? void 0 : _a.doEvent(result);
- alreadyRspModel.push(rspModels[i]);
- }
- }
- // 执行各自协议发送者回调
- if (cb1) {
- cb1(result);
- }
- };
- /**
- * 增加定时器
- * @param callback
- * @param delta 单位毫秒ms
- */
- Network.prototype.AddTimer = function (key, callback, delta) {
- var _this = this;
- if (this.m_Timers.ContainsKey(key)) {
- return;
- }
- var timer = setInterval(function () {
- callback.apply(_this);
- }, delta);
- this.m_Timers.Add(key, timer);
- return timer;
- };
- /** 移除所有定时器 */
- Network.prototype.RemoveTimers = function () {
- this.m_Timers.Foreach(function (key, value) {
- clearInterval(value);
- });
- this.m_Timers.Clear();
- };
- return Network;
- }());
- exports.default = Network;
- cc._RF.pop();
- }
- if (nodeEnv) {
- __define(__module.exports, __require, __module);
- }
- else {
- __quick_compile_project__.registerModuleFunc(__filename, function () {
- __define(__module.exports, __require, __module);
- });
- }
- })();
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0cy9zY3JpcHQvbmV0d29yay9OZXR3b3JrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0Esc0RBQXFEO0FBQ3JELDZDQUF3QztBQUV4QyxxQ0FBNko7QUFDN0oscUNBQXFEO0FBQ3JELG9DQUErQjtBQUMvQix1REFBMkY7QUFFM0YseURBQW9EO0FBQ3BELGdEQUEyQztBQUMzQyw2Q0FBdUQ7QUFDdkQsMkNBQXNDO0FBRXRDO0lBNkJJO1FBNUJRLGlCQUFZLEdBQXlDLEVBQUUsQ0FBQTtRQUUvRCxnQkFBVyxHQUFZLEtBQUssQ0FBQSxDQUFDLGVBQWU7UUFDNUMsY0FBUyxHQUFZLEtBQUssQ0FBQSxDQUFDLGNBQWM7UUFDekMsZUFBVSxHQUFZLEtBQUssQ0FBQTtRQUNuQixjQUFTLEdBQVksS0FBSyxDQUFBLENBQUMsU0FBUztRQUNwQyxrQkFBYSxHQUFxQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQSxDQUFDLGNBQWM7UUFDaEUsY0FBUyxHQUFXLENBQUMsQ0FBQSxDQUFDLFFBQVE7UUFDOUIsYUFBUSxHQUE0QixJQUFJLHFCQUFTLEVBQWdCLENBQUM7SUFxQmxFLENBQUM7SUFsQk8sNkJBQVcsR0FBbkIsVUFBb0IsR0FBVztRQUMzQixJQUFJLE9BQU8sR0FBRyxpQkFBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsZ0JBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRztZQUMvRCxXQUFXLEdBQUcsZ0JBQU0sQ0FBQyxVQUFVO1lBQy9CLFFBQVEsR0FBRyx3QkFBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7UUFDMUMsT0FBTyxPQUFPLENBQUE7SUFDbEIsQ0FBQztJQUVPLDJCQUFTLEdBQWpCLFVBQWtCLEdBQVcsRUFBRSxLQUFhO1FBQ3hDLElBQUksT0FBTyxHQUFHLGlCQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxnQkFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9B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QUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNoQyxPQUFNO1NBQ1Q7UUFDRCxJQUFJLEtBQUssR0FBRyxXQUFXLENBQUM7WUFDcEIsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFJLENBQUMsQ0FBQztRQUN6QixDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDVixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELGNBQWM7SUFDZCw4QkFBWSxHQUFaO1FBQ0ksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFXLEVBQUUsS0FBbUI7WUFDbkQsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUN6QixDQUFDO0lBQ0wsY0FBQztBQUFELENBek1BLEFBeU1DLElBQUEiLCJmaWxlIjoiIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IFN0cmluZ01hcCB9IGZyb20gXCIuLi9Db2xsZWN0aW9ucy9TdHJpbmdNYXBcIjtcbmltcG9ydCBHYW1lY2ZnIGZyb20gXCIuLi9jb21tb24vZ2FtZUNmZ1wiO1xuaW1wb3J0IHsgZ2FtZU1ldGhvZCB9IGZyb20gXCIuLi9jb21tb24vZ2FtZU1ldGhvZFwiO1xuaW1wb3J0IHsgSGRDbHViUGtGaWdodEFsbCwgUGxheWVyTG9naW4sIFBsYXllckxvZ2luUGxheWVyLCBQbGF5ZXJMb2dpblVzZXIsIFBsYXllclJlY29ubmVjdCwgVGFpY2h1V2FqaWVNYXAsIFVzZXJBZG9rLCBaaGFuZ2ppZURhZ3VhaSB9IGZyb20gXCIuLi9jb21tb24vWHljXCI7XG5pbXBvcnQgeyBTZXZCYWNrLCBTZXZCYWNrVHlwZSB9IGZyb20gXCIuLi9jb21tb24vWHlzXCI7XG5pbXBvcnQgQ29uZmlnIGZyb20gXCIuLi9Db25maWdcIjtcbmltcG9ydCB7IEdhbWVFdmVudCwgTmV0d29ya0V2ZW50LCBVc2VyRXZlbnQsIFdpbmRvd0V2ZW50IH0gZnJvbSBcIi4uL2RhdGEvY29uc3QvRXZlbnRDb25zdFwiO1xuaW1wb3J0IHsgSW5HYW1lLCBSZXBvcnRSb2xlVHlwZSB9IGZyb20gXCIuLi9kYXRhL2NvbnN0L1R5cGVDb25zdFwiO1xuaW1wb3J0IEdhbWVEYXRhQ2VudGVyIGZyb20gXCIuLi9kYXRhL0dhbWVEYXRhQ2VudGVyXCI7XG5pbXBvcnQgRXZlbnRNbmcgZnJvbSBcIi4uL21hbmFnZXIvRXZlbnRNbmdcIjtcbmltcG9ydCBIdHRwUmVxdWVzdCwgeyBQT1NUX0RBVEEgfSBmcm9tIFwiLi9IdHRwUmVxdWVzdFwiO1xuaW1wb3J0IFNldkRhdGFNbmcgZnJvbSBcIi4vU2V2RGF0YU1uZ1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXR3b3JrIHtcbiAgICBwcml2YXRlIGxlZnRTZXZiYWNrczogeyBjYjogRnVuY3Rpb24sIHNldmJhY2s6IFNldkJhY2sgfVtdID0gW11cblxuICAgIHN0b3BSZXF1ZXN0OiBib29sZWFuID0gZmFsc2UgLy/lkI7nq6/mj5DnpLrph43lkK/lkI7lgZzmraLlj5HpgIHljY/orq5cbiAgICBzdG9wUG9wRXA6IGJvb2xlYW4gPSBmYWxzZSAvL+WkhOeQhuijheWkh+eahOWxnuaAp+WPmOWMluS4jemjmOWtl1xuICAgIGlzRXBDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZVxuICAgIHByaXZhdGUgaXNPdXRDbHViOiBib29sZWFuID0gZmFsc2UgLy8g5piv5ZCm6YCA5Ye65YWs5LyaXG4gICAgcHJpdmF0ZSBpc1Nob3dUaW1lYmVuOiBbbnVtYmVyLCBzdHJpbmddID0gWzAsIFwiXCJdIC8vIOaYr+WQpuaJk+W8gOaIluWIt+aWsOemj+WIqeekvOWMhVxuICAgIGNtZENvdW50czogbnVtYmVyID0gMCAvL+e9kee7nOivt+axguiuoeaVsFxuICAgIG1fVGltZXJzOiBTdHJpbmdNYXA8Tm9kZUpTLlRpbWVyPiA9IG5ldyBTdHJpbmdNYXA8Tm9kZUpTLlRpbWVyPigpO1xuICAgIHJlU2VudFRpbWU6IG51bWJlcjtcblxuICAgIHByaXZhdGUgZ2V0TG9naW5VcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcmVhbFVybCA9IEdhbWVjZmcucGFja2FnZUluZm8uZ2V0SXRlbShDb25maWcucGlkKS53YXlodHRwICsgdXJsICtcbiAgICAgICAgICAgIFwiP3ZlcnNpb249XCIgKyBDb25maWcuYXBwVmVyc2lvbiArXG4gICAgICAgICAgICBcIiZ0aW1lPVwiICsgR2FtZURhdGFDZW50ZXIudGltZS5zZXZUaW1lXG4gICAgICAgIHJldHVybiByZWFsVXJsXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDbWRVcmwodXJsOiBzdHJpbmcsIGNtZElkOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcmVhbFVybCA9IEdhbWVjZmcucGFja2FnZUluZm8uZ2V0SXRlbShDb25maWcucGlkKS53YXlodHRwICsgdXJsICtcbiAgICAgICAgICAgIFwiP3V1aWQ9XCIgKyBHYW1lRGF0YUNlbnRlci51c2VyLnV1aWQgK1xuICAgICAgICAgICAgXCImdG9rZW49XCIgKyBHYW1lRGF0YUNlbnRlci51c2VyLnRva2VuICtcbiAgICAgICAgICAgIFwiJnZlcnNpb249XCIgKyBDb25maWcuYXBwVmVyc2lvbiArXG4gICAgICAgICAgICBcIiZjbWRJZD1cIiArIGNtZElkICtcbiAgICAgICAgICAgIFwiJnRpbWU9XCIgKyBHYW1lRGF0YUNlbnRlci50aW1lLnNldlRpbWVcbiAgICAgICAgcmV0dXJuIHJlYWxVcmxcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICB9XG4gICAgLy8g5LiN6ZyA6KaB5aSE55CG5Zue6LCD5pWw5o2u55qELOi1sOi/memHjFxuICAgIHN0YXRpYyBQT1NUX1NQRUNJQUwocGF0aDogc3RyaW5nLCBib2R5OiBzdHJpbmcsIGNiOiBGdW5jdGlvbiA9ICgpID0+IHsgfSkge1xuICAgICAgICBsZXQgciA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG4gICAgICAgIHIub3BlbihcIlBPU1RcIiwgcGF0aCwgdHJ1ZSlcbiAgICAgICAgci50aW1lb3V0ID0gMTUwMDBcbiAgICAgICAgci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKVxuICAgICAgICByLm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChyLnN0YXR1cyA+PSAyMDAgJiYgci5zdGF0dXMgPD0gNDAwICYmIHIucmVhZHlTdGF0ZSA9PSA0KSB7XG4gICAgICAgICAgICAgICAgY2IoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByLnNlbmQoYm9keSlcbiAgICB9XG4gICAgc2VuZExvZ2luKHVybDogc3RyaW5nLCBib2R5OiBPYmplY3QsIGNhbGxiYWNrOiBGdW5jdGlvbiA9ICgpID0+IHsgfSkge1xuICAgICAgICBIdHRwUmVxdWVzdC5QT1NUKHRoaXMuZ2V0TG9naW5VcmwodXJsKSwgeyB1dWlkOiBHYW1lRGF0YUNlbnRlci51c2VyLnV1aWQsIHZlcnNpb246IENvbmZpZy5hcHBWZXJzaW9uLCB1cmw6IHVybCB9LCBib2R5LCAocmVzdWx0OiBTZXZCYWNrKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNldkJhY2socmVzdWx0LCBjYWxsYmFjaylcbiAgICAgICAgfSwgdHJ1ZSlcbiAgICB9XG4gICAgc2VuZCh1cmw6IHN0cmluZywgYm9keTogT2JqZWN0LCBjYjE/OiAoc2V2OiBTZXZCYWNrKSA9PiB2b2lkLCBjYjI/OiAoc2V2OiBTZXZCYWNrKSA9PiB2b2lkLCBkZWFsOiBudW1iZXIgPSAxLCBuZWVkV2FpdDogYm9vbGVhbiA9IGZhbHNlLCBjbWRJZDogbnVtYmVyID0gLTEpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RvcFJlcXVlc3QpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIC8v5q+P5Y+R6YCB5LiA5Liq5raI5oGv77yM5raI5oGv6K6h5pWw57Sv6K6h77yM5pa55L6/5pyN5Yqh56uv5YGa5Yik5patXG4gICAgICAgIHRoaXMuY21kQ291bnRzKytcbiAgICAgICAgLy/lhYjnvJPlrZjlj5HpgIHnmoTmtojmga/vvIzotoXml7bph43mlrDor7fmsYJcbiAgICAgICAgbGV0IHBvc3REYXRhVGVtcDogUE9TVF9EQVRBID0ge1xuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICBib2R5OiBib2R5LFxuICAgICAgICAgICAgY2IxOiBjYjEsXG4gICAgICAgICAgICBjYjI6IGNiMixcbiAgICAgICAgICAgIGRlYWw6IGRlYWwsXG4gICAgICAgICAgICBjbWRJZDogY21kSWQgPT0gLTEgPyB0aGlzLmNtZENvdW50cyA6IGNtZElkXG4gICAgICAgIH1cbiAgICAgICAgbGV0IHVuRXJyQXJyID0gW1BsYXllclJlY29ubmVjdC51cmwsIFVzZXJBZG9rLnVybCwgVXNlckFkb2sudXJsXTtcbiAgICAgICAgaWYgKHVuRXJyQXJyLmluZGV4T2YodXJsKSA8IDApIHtcbiAgICAgICAgICAgIC8v6YeN6L+e5o6l5Y+j77yM5b+D6Lez5YyFLCDmjILmnLrmiZPmgKrml6DpnIDph43mlrDlj5HpgIFcbiAgICAgICAgICAgIEh0dHBSZXF1ZXN0LmVyclBvc3RNYXAuQWRkKHVybCwgcG9zdERhdGFUZW1wKVxuICAgICAgICAgICAgbGV0IHVuQXJyID0gW1BsYXllckxvZ2luLnVybCwgUGxheWVyTG9naW5QbGF5ZXIudXJsLCBQbGF5ZXJMb2dpblVzZXIudXJsLCBIZENsdWJQa0ZpZ2h0QWxsLnVybCwgVGFpY2h1V2FqaWVNYXAudXJsLCBaaGFuZ2ppZURhZ3VhaS51cmxdO1xuICAgICAgICAgICAgaWYgKHVuQXJyLmluZGV4T2YodXJsKSA8IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgcG9zdFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgICAgICAgICAgIHBvc3REYXRhVGVtcC5wb3N0VGltZSA9IHBvc3RUaW1lXG4gICAgICAgICAgICAgICAgSHR0cFJlcXVlc3QuY3VyUG9zdE1hcC5BZGQodXJsLCBwb3N0RGF0YVRlbXApXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5BZGRUaW1lcih1cmwsICgpID0+IHtcbiAgICAgICAgICAgIGxldCBjdXJUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAgICAgICAgIGlmICghdGhpcy5yZVNlbnRUaW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZVNlbnRUaW1lID0gY2Muc3lzLnBsYXRmb3JtID09IGNjLnN5cy5UQU9CQU9fTUlOSUdBTUUgPyAzMDAwIDogMTUwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChIdHRwUmVxdWVzdC5jdXJQb3N0TWFwLkNvbnRhaW5zS2V5KHVybCkgJiYgY3VyVGltZSAtIEh0dHBSZXF1ZXN0LmN1clBvc3RNYXAuVmFsdWUodXJsKS5wb3N0VGltZSA+PSB0aGlzLnJlU2VudFRpbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgMS41c+WQjumHjeaWsOWPkemAgToke3VybH1gKVxuICAgICAgICAgICAgICAgIC8v6YGu572p6K6h5pWwLTFcbiAgICAgICAgICAgICAgICBFdmVudE1uZy5lbWl0KE5ldHdvcmtFdmVudC5XQUlULCAtMSlcbiAgICAgICAgICAgICAgICB0aGlzLm1fVGltZXJzLlJlbW92ZSh1cmwpXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gSHR0cFJlcXVlc3QuY3VyUG9zdE1hcC5WYWx1ZSh1cmwpXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kKHZhbHVlLnVybCwgdmFsdWUuYm9keSwgdmFsdWUuY2IxLCB2YWx1ZS5jYjIsIHZhbHVlLmRlYWwsIGZhbHNlLCB2YWx1ZS5jbWRJZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgNTAwKVxuICAgICAgICBpZiAobmVlZFdhaXQpIEV2ZW50TW5nLmVtaXQoTmV0d29ya0V2ZW50Lk5FVFdBSVRfTUFTSywgdHJ1ZSlcbiAgICAgICAgbGV0IGN1ckNtZElkID0gY21kSWQgPT0gLTEgPyB0aGlzLmNtZENvdW50cyA6IGNtZElkXG4gICAgICAgIEh0dHBSZXF1ZXN0LlBPU1QodGhpcy5nZXRDbWRVcmwodXJsLCBjdXJDbWRJZCksIHsgdXVpZDogR2FtZURhdGFDZW50ZXIudXNlci51dWlkLCB2ZXJzaW9uOiBDb25maWcuYXBwVmVyc2lvbiwgdXJsOiB1cmwgfSwgYm9keSwgKHJlc3VsdDogU2V2QmFjaykgPT4ge1xuICAgICAgICAgICAgaWYgKG5lZWRXYWl0KSBFdmVudE1uZy5lbWl0KE5ldHdvcmtFdmVudC5ORVRXQUlUX01BU0ssIGZhbHNlKVxuICAgICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFNldkJhY2tUeXBlLnd1KSB7XG4gICAgICAgICAgICAgICAgLy/ml6DpnIDlpITnkIbnmoTmtojmga9cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjYjIpIHtcbiAgICAgICAgICAgICAgICBjYjIocmVzdWx0KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFNldkJhY2tUeXBlLmZhaWwpIHtcbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzlh7rnjrDlvILluLgs5YiZ55u05o6l5aSE55CGXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZXZCYWNrKHJlc3VsdCwgY2IxKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRlYWwgPT0gMSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxlZnRTZXZiYWNrcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGVmdFNldmJhY2tzLnB1c2goeyBjYjogY2IxLCBzZXZiYWNrOiByZXN1bHQgfSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNldkJhY2socmVzdWx0LCBjYjEpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChkZWFsID09IDIpIHsgLy8g5pqC5a2Y5by556qX5L+h5oGvXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGVmdFNldmJhY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWZ0U2V2YmFja3MucHVzaCh7IGNiOiBjYjEsIHNldmJhY2s6IHJlc3VsdCB9KVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wU2V2YmFjazogU2V2QmFjayA9IHsgdHlwZTogcmVzdWx0LnR5cGUgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxlZnRTZXZiYWNrcy5wdXNoKHsgY2I6ICgpID0+IHsgfSwgc2V2YmFjazogdGVtcFNldmJhY2sgfSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZXZCYWNrKHJlc3VsdCwgY2IxKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0U2V2YmFja3MucHVzaCh7IGNiOiBjYjEsIHNldmJhY2s6IHJlc3VsdCB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmYWxzZSlcbiAgICB9XG4gICAgLy8g5aSE55CG5pqC5a2Y55qE5ZCO56uv5pWw5o2uXG4gICAgZGVhbExlZnRTZXZiYWNrKCkge1xuICAgICAgICB0aGlzLmxlZnRTZXZiYWNrcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZXZCYWNrKGVsZW1lbnQuc2V2YmFjaywgZWxlbWVudC5jYilcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubGVmdFNldmJhY2tzID0gW11cbiAgICB9XG4gICAgdXBkYXRlU2V2QmFjayhyZXN1bHQ6IFNldkJhY2ssIGNiMTogRnVuY3Rpb24pIHtcbiAgICAgICAgLy8g5Yi35paw5ZCO56uv5pWw5o2u5YiX6KGoXG4gICAgICAgIGxldCBvbGRQb3dlcjogbnVtYmVyID0gR2FtZURhdGFDZW50ZXIuc2V2QmFjaz8udXNlckluZm8/LmE/LnBvd2VyID8/IDA7XG4gICAgICAgIGxldCBzZXZiYWNrID0gU2V2RGF0YU1uZy5zZXZCYWNrVXBkYXRlKEdhbWVEYXRhQ2VudGVyLnNldkJhY2ssIHJlc3VsdClcbiAgICAgICAgLy8g6L+Z6YeM5Y675qOA5rWL6YCa55So57G75pWw5o2u55qE5YmN5ZCO5a+55q+UXG4gICAgICAgIHRoaXMuaXNPdXRDbHViID0gZmFsc2VcbiAgICAgICAgdGhpcy5pc1Nob3dUaW1lYmVuID0gWzAsIFwiXCJdXG4gICAgICAgIEdhbWVEYXRhQ2VudGVyLnNldkJhY2sgPSBzZXZiYWNrO1xuICAgICAgICAvLyBpZiAoKCFnYW1lTWV0aG9kLmlzRW1wdHkocmVzdWx0Py51c2VySW5mbz8uYT8ucG93ZXIpIHx8ICghZ2FtZU1ldGhvZC5pc0VtcHR5KHJlc3VsdD8udXNlckluZm8/LnU/LnBvd2VyKSkpKSB7XG4gICAgICAgIC8vICAgICAvLyDmm7TmlrDmiJjmlpfliptcbiAgICAgICAgLy8gICAgIGlmIChHYW1lRGF0YUNlbnRlci56aGFuTGkpIEdhbWVEYXRhQ2VudGVyLnpoYW5MaS51cGRhdGVUb3RhbFpoYW5MaShvbGRQb3dlciwgc2V2YmFjaz8udXNlckluZm8/LmE/LnBvd2VyKTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyDkuJrliqHpgLvovpHoh6rlrprkuYnlj4LmlbDlpITnkIZcbiAgICAgICAgZm9yIChsZXQga2V5IGluIHJlc3VsdCkge1xuICAgICAgICAgICAgbGV0IHJzcE1vZGVscyA9IEdhbWVEYXRhQ2VudGVyLl9yc3BNb2RlbC5nZXQoa2V5KVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByc3BNb2RlbHM/Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgLy/pnIDopoHliIblj5Hkuovku7bnmoTmqKHlnZfliIblj5FcbiAgICAgICAgICAgICAgICByc3BNb2RlbHNbaV0/LmRvU2V2YmFjayhyZXN1bHQpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8g6Kem5Y+R5LqL5Lu2LOWIt+aWsFVJXG4gICAgICAgIHRoaXMudXBkYXRlRXZlbnQocmVzdWx0LCBjYjEpXG4gICAgICAgIC8vIOmcgOimgeWcqOaVsOaNruWkhOeQhuWQjuinpuWPkVxuICAgICAgICBpZiAodGhpcy5pc091dENsdWIpIHtcblxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlRXZlbnQocmVzdWx0OiBTZXZCYWNrLCBjYjE6IEZ1bmN0aW9uKSB7XG4gICAgICAgIGxldCBhbHJlYWR5UnNwTW9kZWwgPSBbXSAgLy/lt7LliIblj5HnmoTmqKHlnZfvvIzlkIzkuKrmtojmga/lkIzkuKrmqKHlnZflj6rliIblj5HkuIDmrKFcbiAgICAgICAgZm9yIChsZXQga2V5IGluIHJlc3VsdCkge1xuICAgICAgICAgICAgbGV0IHJzcE1vZGVscyA9IEdhbWVEYXRhQ2VudGVyLl9yc3BNb2RlbC5nZXQoa2V5KVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByc3BNb2RlbHM/Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFscmVhZHlSc3BNb2RlbC5pbmRleE9mKHJzcE1vZGVsc1tpXSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvL+mcgOimgeWIhuWPkeS6i+S7tueahOaooeWdl+WIhuWPkVxuICAgICAgICAgICAgICAgIHJzcE1vZGVsc1tpXT8uZG9FdmVudChyZXN1bHQpXG4gICAgICAgICAgICAgICAgYWxyZWFkeVJzcE1vZGVsLnB1c2gocnNwTW9kZWxzW2ldKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIOaJp+ihjOWQhOiHquWNj+iuruWPkemAgeiAheWbnuiwg1xuICAgICAgICBpZiAoY2IxKSB7XG4gICAgICAgICAgICBjYjEocmVzdWx0KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5aKe5Yqg5a6a5pe25ZmoXG4gICAgICogQHBhcmFtIGNhbGxiYWNrIFxuICAgICAqIEBwYXJhbSBkZWx0YSDljZXkvY3mr6vnp5Jtc1xuICAgICAqL1xuICAgIEFkZFRpbWVyKGtleTogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24sIGRlbHRhOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMubV9UaW1lcnMuQ29udGFpbnNLZXkoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkodGhpcyk7XG4gICAgICAgIH0sIGRlbHRhKTtcbiAgICAgICAgdGhpcy5tX1RpbWVycy5BZGQoa2V5LCB0aW1lcik7XG4gICAgICAgIHJldHVybiB0aW1lcjtcbiAgICB9XG5cbiAgICAvKiog56e76Zmk5omA5pyJ5a6a5pe25ZmoICovXG4gICAgUmVtb3ZlVGltZXJzKCkge1xuICAgICAgICB0aGlzLm1fVGltZXJzLkZvcmVhY2goKGtleTogc3RyaW5nLCB2YWx1ZTogTm9kZUpTLlRpbWVyKSA9PiB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubV9UaW1lcnMuQ2xlYXIoKVxuICAgIH1cbn0iXX0=
|