@xmobitea/gn-server 2.4.13 → 2.4.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/GN-app-api/handler/controller/handler/characterPlayer/GetCurrencyLeaderboardRequestHandler.d.ts +1 -0
  2. package/dist/GN-app-api/handler/controller/handler/characterPlayer/GetFriendStatisticsLeaderboardAroundPlayerRequestHandler.d.ts +1 -0
  3. package/dist/GN-app-api/handler/controller/handler/characterPlayer/GetFriendStatisticsLeaderboardRequestHandler.d.ts +1 -0
  4. package/dist/GN-app-api/handler/controller/handler/characterPlayer/GetStatisticsLeaderboardAroundPlayerRequestHandler.d.ts +2 -0
  5. package/dist/GN-app-api/handler/controller/handler/characterPlayer/GetStatisticsLeaderboardRequestHandler.d.ts +1 -0
  6. package/dist/GN-app-api/handler/controller/handler/dashboard/GetAnalyticsRequestHandler.d.ts +4 -0
  7. package/dist/GN-app-api/handler/controller/handler/dashboard/ResetStatisticsLeaderboardRequestHandler.d.ts +1 -0
  8. package/dist/GN-app-api/handler/controller/handler/gamePlayer/GetFriendStatisticsLeaderboardAroundPlayerRequestHandler.d.ts +1 -0
  9. package/dist/GN-app-api/handler/controller/handler/gamePlayer/GetFriendStatisticsLeaderboardRequestHandler.d.ts +1 -0
  10. package/dist/GN-app-api/handler/controller/handler/gamePlayer/GetStatisticsLeaderboardAroundPlayerRequestHandler.d.ts +1 -0
  11. package/dist/GN-app-api/handler/controller/handler/group/GetCurrencyLeaderboardRequestHandler.d.ts +1 -0
  12. package/dist/GN-app-api/handler/controller/handler/group/GetStatisticsLeaderboardAroundGroupRequestHandler.d.ts +2 -0
  13. package/dist/GN-app-api/handler/controller/handler/group/GetStatisticsLeaderboardRequestHandler.d.ts +1 -0
  14. package/dist/GN-app-api/handler/controller/handler/inventory/GetStatisticsLeaderboardAroundItemRequestHandler.d.ts +2 -0
  15. package/dist/GN-app-api/handler/controller/handler/inventory/GetStatisticsLeaderboardRequestHandler.d.ts +1 -0
  16. package/dist/GN-app-api/handler/controller/handler/masterPlayer/GetStatisticsLeaderboardAroundPlayerRequestHandler.d.ts +1 -0
  17. package/dist/GN-app-api/service/AnalyticsService.d.ts +2 -0
  18. package/dist/GN-app-api/service/EventCallbackService.d.ts +7 -0
  19. package/dist/GN-app-api/service/IAnalyticsService.d.ts +18 -6
  20. package/dist/GN-common/constant/enumType/ItemType.d.ts +2 -2
  21. package/dist/GN-common/constant/errorCode/GNErrorCode.d.ts +1 -1
  22. package/dist/GN-common/constant/parameterCode/GNParameterCode.d.ts +7 -0
  23. package/dist/GN-library/xcachedata/lib/xCacheData.d.ts +1 -0
  24. package/dist/GN-library/xdatabase/lib/xDatabase.d.ts +12 -12
  25. package/dist/GN-startup/cloudScript/eventCallbackCloudScriptData.json +35 -15
  26. package/dist/GN-startup/cloudScript/templateCloudScript.ts +31 -1
  27. package/dist/GN-startup/cloudScript/templateEventCallback.ts +95 -3
  28. package/dist/GNServer.d.ts +1 -0
  29. package/dist/index.js +1391 -484
  30. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -5157,6 +5157,10 @@ __decorate([
5157
5157
  (0, DataMember_1.BooleanDataMember)({ code: GNParameterCode_1.GNParameterCode.LoadFromCache, defaultValue: true, isOptional: true }),
5158
5158
  __metadata("design:type", Boolean)
5159
5159
  ], GetCurrencyLeaderboardOperationRequest.prototype, "loadFromCache", void 0);
5160
+ __decorate([
5161
+ (0, DataMember_1.StringDataMember)({ code: GNParameterCode_1.GNParameterCode.CatalogId, minLength: 2, maxLength: 32, mustNonNull: true, isOptional: true }),
5162
+ __metadata("design:type", String)
5163
+ ], GetCurrencyLeaderboardOperationRequest.prototype, "catalogId", void 0);
5160
5164
  class ServerGetCurrencyLeaderboardOperationRequest extends GetCurrencyLeaderboardOperationRequest {
5161
5165
  isValidRequest() {
5162
5166
  if (!super.isValidRequest())
@@ -5197,6 +5201,7 @@ class GetCurrencyLeaderboardRequestHandler extends CharacterPlayerBaseRequestHan
5197
5201
  limit: request.limit,
5198
5202
  infoRequestParam: request.infoRequestParam,
5199
5203
  loadFromCache: request.loadFromCache,
5204
+ catalogId: request.catalogId,
5200
5205
  }, secretInfo, operationRequest);
5201
5206
  });
5202
5207
  }
@@ -5216,6 +5221,7 @@ class GetCurrencyLeaderboardRequestHandler extends CharacterPlayerBaseRequestHan
5216
5221
  limit: request.limit,
5217
5222
  infoRequestParam: request.infoRequestParam,
5218
5223
  loadFromCache: request.loadFromCache,
5224
+ catalogId: request.catalogId,
5219
5225
  }, secretInfo, operationRequest);
5220
5226
  });
5221
5227
  }
@@ -5235,6 +5241,7 @@ class GetCurrencyLeaderboardRequestHandler extends CharacterPlayerBaseRequestHan
5235
5241
  limit: request.limit,
5236
5242
  infoRequestParam: request.infoRequestParam,
5237
5243
  loadFromCache: request.loadFromCache,
5244
+ catalogId: request.catalogId,
5238
5245
  }, secretInfo, operationRequest);
5239
5246
  });
5240
5247
  }
@@ -5246,14 +5253,15 @@ class GetCurrencyLeaderboardRequestHandler extends CharacterPlayerBaseRequestHan
5246
5253
  }
5247
5254
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
5248
5255
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
5249
- let characterPlayerFindOptions = this.convertToCharacterPlayerFindOptions(request.infoRequestParam);
5250
- let masterPlayerSettings = this.gnServer.getGNSettings().getCharacterPlayerSettings(secretInfo.getGameId());
5251
- let playerCurrencySettingsItem = masterPlayerSettings.playerCurrencySettings.find(x => x.key == request.key);
5256
+ let characterPlayerSettings = this.gnServer.getGNSettings().getCharacterPlayerSettings(secretInfo.getGameId());
5257
+ let playerCurrencySettingsItem = characterPlayerSettings.playerCurrencySettings.find(x => x.key == request.key);
5252
5258
  if (playerCurrencySettingsItem == null) {
5253
5259
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.KeyNotFound);
5254
5260
  return operationResponse;
5255
5261
  }
5256
5262
  let cacheKey = "characterPlayerCurrencyLeaderboard_" + request.key;
5263
+ if (request.catalogId)
5264
+ cacheKey += "_" + request.catalogId;
5257
5265
  if (request.loadFromCache) {
5258
5266
  if (request.skip + request.limit > 100) {
5259
5267
  request.loadFromCache = false;
@@ -5280,9 +5288,10 @@ class GetCurrencyLeaderboardRequestHandler extends CharacterPlayerBaseRequestHan
5280
5288
  }
5281
5289
  }
5282
5290
  else {
5291
+ let characterPlayerFindOptions = this.convertToCharacterPlayerFindOptions(request.infoRequestParam);
5283
5292
  if (request.skip + request.limit <= 100) {
5284
5293
  characterPlayerFindOptions = null;
5285
- characterPlayers = yield this.gnServer.getDatabase().loadCharacterPlayersLeaderboardWithCurrenciesAsync(request.key, 0, 100, secretInfo.getGameId(), characterPlayerFindOptions);
5294
+ characterPlayers = yield this.gnServer.getDatabase().loadCharacterPlayersLeaderboardWithCurrenciesAsync(request.key, 0, 100, request.catalogId, secretInfo.getGameId(), characterPlayerFindOptions);
5286
5295
  for (let i = request.skip; i < request.skip + request.limit; i++) {
5287
5296
  if (i >= characterPlayers.length)
5288
5297
  break;
@@ -5296,7 +5305,7 @@ class GetCurrencyLeaderboardRequestHandler extends CharacterPlayerBaseRequestHan
5296
5305
  this.gnServer.getCacheData().setData(cacheKey, characterPlayers, xDatetime_1.xDatetime.ONE_MINUTE_MILLISECOND * 5);
5297
5306
  }
5298
5307
  else {
5299
- characterPlayers = yield this.gnServer.getDatabase().loadCharacterPlayersLeaderboardWithCurrenciesAsync(request.key, request.skip, request.limit, secretInfo.getGameId(), characterPlayerFindOptions);
5308
+ characterPlayers = yield this.gnServer.getDatabase().loadCharacterPlayersLeaderboardWithCurrenciesAsync(request.key, request.skip, request.limit, request.catalogId, secretInfo.getGameId(), characterPlayerFindOptions);
5300
5309
  for (let i = 0; i < characterPlayers.length; i++) {
5301
5310
  let characterPlayer = characterPlayers[i];
5302
5311
  let gnResult = new GNData_1.GNHashtable();
@@ -5459,11 +5468,11 @@ class GetCurrencyLogRequestHandler extends RequestHandler_1.RequestHandler {
5459
5468
  }
5460
5469
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
5461
5470
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
5462
- let masterPlayerSettings = this.gnServer.getGNSettings().getCharacterPlayerSettings(secretInfo.getGameId());
5471
+ let characterPlayerSettings = this.gnServer.getGNSettings().getCharacterPlayerSettings(secretInfo.getGameId());
5463
5472
  let keys = [];
5464
5473
  if (request.keys) {
5465
5474
  for (let i = 0; i < request.keys.length; i++) {
5466
- let playerCurrencySettingsItem = masterPlayerSettings.playerCurrencySettings.find(x => x.key == request.keys[i]);
5475
+ let playerCurrencySettingsItem = characterPlayerSettings.playerCurrencySettings.find(x => x.key == request.keys[i]);
5467
5476
  if (playerCurrencySettingsItem != null) {
5468
5477
  keys.push(playerCurrencySettingsItem.key);
5469
5478
  }
@@ -5838,6 +5847,7 @@ const InfoRequestParam_1 = __webpack_require__(21803);
5838
5847
  const FriendStatus_1 = __webpack_require__(11259);
5839
5848
  const GetFriendStatisticsLeaderboardRequestHandler_1 = __webpack_require__(31378);
5840
5849
  const xStatisticsAggregationMethod_1 = __webpack_require__(21554);
5850
+ const xDatetime_1 = __webpack_require__(21817);
5841
5851
  class GetFriendStatisticsLeaderboardAroundPlayerOperationRequest extends OperationRequest_1.OperationRequest {
5842
5852
  isValidRequest() {
5843
5853
  if (!super.isValidRequest())
@@ -5865,6 +5875,10 @@ __decorate([
5865
5875
  (0, DataMember_1.NumberDataMember)({ code: GNParameterCode_1.GNParameterCode.Limit, defaultValue: 10, minValue: 1, maxValue: 100, mustInt: true, isOptional: true }),
5866
5876
  __metadata("design:type", Number)
5867
5877
  ], GetFriendStatisticsLeaderboardAroundPlayerOperationRequest.prototype, "limit", void 0);
5878
+ __decorate([
5879
+ (0, DataMember_1.BooleanDataMember)({ code: GNParameterCode_1.GNParameterCode.LoadFromCache, defaultValue: true, isOptional: true }),
5880
+ __metadata("design:type", Boolean)
5881
+ ], GetFriendStatisticsLeaderboardAroundPlayerOperationRequest.prototype, "loadFromCache", void 0);
5868
5882
  class ServerGetFriendStatisticsLeaderboardAroundPlayerOperationRequest extends GetFriendStatisticsLeaderboardAroundPlayerOperationRequest {
5869
5883
  isValidRequest() {
5870
5884
  if (!super.isValidRequest())
@@ -5902,7 +5916,8 @@ class GetFriendStatisticsLeaderboardAroundPlayerRequestHandler extends Character
5902
5916
  key: request.key,
5903
5917
  skip: request.skip,
5904
5918
  limit: request.limit,
5905
- infoRequestParam: request.infoRequestParam
5919
+ infoRequestParam: request.infoRequestParam,
5920
+ loadFromCache: request.loadFromCache,
5906
5921
  }, secretInfo, operationRequest);
5907
5922
  });
5908
5923
  }
@@ -5921,7 +5936,8 @@ class GetFriendStatisticsLeaderboardAroundPlayerRequestHandler extends Character
5921
5936
  key: request.key,
5922
5937
  skip: request.skip,
5923
5938
  limit: request.limit,
5924
- infoRequestParam: request.infoRequestParam
5939
+ infoRequestParam: request.infoRequestParam,
5940
+ loadFromCache: request.loadFromCache,
5925
5941
  }, secretInfo, operationRequest);
5926
5942
  });
5927
5943
  }
@@ -5940,7 +5956,8 @@ class GetFriendStatisticsLeaderboardAroundPlayerRequestHandler extends Character
5940
5956
  key: request.key,
5941
5957
  skip: request.skip,
5942
5958
  limit: request.limit,
5943
- infoRequestParam: request.infoRequestParam
5959
+ infoRequestParam: request.infoRequestParam,
5960
+ loadFromCache: request.loadFromCache,
5944
5961
  }, secretInfo, operationRequest);
5945
5962
  });
5946
5963
  }
@@ -5952,33 +5969,46 @@ class GetFriendStatisticsLeaderboardAroundPlayerRequestHandler extends Character
5952
5969
  }
5953
5970
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
5954
5971
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
5955
- let characterPlayerFindOptions = this.convertToCharacterPlayerFindOptions(request.infoRequestParam);
5956
- let masterPlayerSettings = this.gnServer.getGNSettings().getCharacterPlayerSettings(secretInfo.getGameId());
5957
- let playerStatisticsSettingsItem = masterPlayerSettings.playerStatisticsSettings.find(x => x.key == request.key);
5972
+ let characterPlayerSettings = this.gnServer.getGNSettings().getCharacterPlayerSettings(secretInfo.getGameId());
5973
+ let playerStatisticsSettingsItem = characterPlayerSettings.playerStatisticsSettings.find(x => x.key == request.key);
5958
5974
  if (playerStatisticsSettingsItem == null) {
5959
5975
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.KeyNotFound);
5960
5976
  return operationResponse;
5961
5977
  }
5962
- let characterPlayer = yield this.gnServer.getDatabase().loadCharacterPlayerAsync(request.characterId, secretInfo.getGameId(), { playerFriends: true, playerStatistics: true });
5963
- if (characterPlayer == null) {
5964
- operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.CharacterPlayerNotFound);
5965
- return operationResponse;
5978
+ let cacheKey = "characterPlayerStatisticsLeaderboardFriendAround_" + request.characterId;
5979
+ if (request.loadFromCache) {
5980
+ if (!this.gnServer.getCacheData().isValid(cacheKey)) {
5981
+ request.loadFromCache = false;
5982
+ }
5966
5983
  }
5967
5984
  let gnResults = new GNData_1.GNArray();
5968
- let friendIds = [];
5969
- let allPlayerFriends = characterPlayer.getAllPlayerFriends();
5970
- for (let i = 0; i < allPlayerFriends.length; i++) {
5971
- let playerFriendItem = allPlayerFriends[i];
5972
- if (playerFriendItem.status == FriendStatus_1.FriendStatus.Friend) {
5973
- friendIds.push(playerFriendItem.friendId);
5974
- }
5975
- }
5976
- let allCharacterPlayers = yield this.gnServer.getDatabase().loadFriendCharacterPlayersLeaderboardWithStatisticsAsync(friendIds, secretInfo.getGameId(), characterPlayerFindOptions);
5977
- allCharacterPlayers.push(characterPlayer);
5978
- let statisticsAggregationMethod = playerStatisticsSettingsItem.statisticsAggregationMethod;
5979
- let characterPlayers = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum
5980
- ? GetFriendStatisticsLeaderboardRequestHandler_1.GetFriendStatisticsLeaderboardRequestHandler.quickSortAsc(request.key, allCharacterPlayers, playerStatisticsSettingsItem.initialValue)
5981
- : GetFriendStatisticsLeaderboardRequestHandler_1.GetFriendStatisticsLeaderboardRequestHandler.quickSort(request.key, allCharacterPlayers, playerStatisticsSettingsItem.initialValue);
5985
+ let characterPlayers;
5986
+ if (request.loadFromCache) {
5987
+ characterPlayers = this.gnServer.getCacheData().getData(cacheKey);
5988
+ }
5989
+ else {
5990
+ let characterPlayer = yield this.gnServer.getDatabase().loadCharacterPlayerAsync(request.characterId, secretInfo.getGameId(), null);
5991
+ if (characterPlayer == null) {
5992
+ operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.CharacterPlayerNotFound);
5993
+ return operationResponse;
5994
+ }
5995
+ let friendIds = [];
5996
+ let allPlayerFriends = characterPlayer.getAllPlayerFriends();
5997
+ for (let i = 0; i < allPlayerFriends.length; i++) {
5998
+ let playerFriendItem = allPlayerFriends[i];
5999
+ if (playerFriendItem.status == FriendStatus_1.FriendStatus.Friend) {
6000
+ friendIds.push(playerFriendItem.friendId);
6001
+ }
6002
+ }
6003
+ let allCharacterPlayers = yield this.gnServer.getDatabase().loadFriendCharacterPlayersLeaderboardWithStatisticsAsync(friendIds, secretInfo.getGameId(), null);
6004
+ allCharacterPlayers.push(characterPlayer);
6005
+ let statisticsAggregationMethod = playerStatisticsSettingsItem.statisticsAggregationMethod;
6006
+ characterPlayers = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum
6007
+ ? GetFriendStatisticsLeaderboardRequestHandler_1.GetFriendStatisticsLeaderboardRequestHandler.quickSortAsc(request.key, allCharacterPlayers, playerStatisticsSettingsItem.initialValue)
6008
+ : GetFriendStatisticsLeaderboardRequestHandler_1.GetFriendStatisticsLeaderboardRequestHandler.quickSort(request.key, allCharacterPlayers, playerStatisticsSettingsItem.initialValue);
6009
+ this.gnServer.getCacheData().setData(cacheKey, characterPlayers, xDatetime_1.xDatetime.ONE_MINUTE_MILLISECOND * 5);
6010
+ }
6011
+ let characterPlayer = characterPlayers.find(x => x.getCharacterId() == request.characterId);
5982
6012
  let thisPosition = characterPlayers.indexOf(characterPlayer);
5983
6013
  for (let i = request.skip + thisPosition; i < request.skip + thisPosition + request.limit; i++) {
5984
6014
  if (i >= characterPlayers.length)
@@ -5992,6 +6022,7 @@ class GetFriendStatisticsLeaderboardAroundPlayerRequestHandler extends Character
5992
6022
  }
5993
6023
  operationResponse.setParameter(GNParameterCode_1.GNParameterCode.Results, gnResults);
5994
6024
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.Ok);
6025
+ yield this.gnServer.getPostEventCallbackService().onEvent("characterPlayer_GetFriendStatisticsLeaderboardAroundPlayer", request, secretInfo, operationRequest, operationResponse);
5995
6026
  return operationResponse;
5996
6027
  });
5997
6028
  }
@@ -6066,6 +6097,10 @@ __decorate([
6066
6097
  (0, DataMember_1.NumberDataMember)({ code: GNParameterCode_1.GNParameterCode.Limit, defaultValue: 10, minValue: 1, maxValue: 100, mustInt: true, isOptional: true }),
6067
6098
  __metadata("design:type", Number)
6068
6099
  ], GetFriendStatisticsLeaderboardOperationRequest.prototype, "limit", void 0);
6100
+ __decorate([
6101
+ (0, DataMember_1.BooleanDataMember)({ code: GNParameterCode_1.GNParameterCode.LoadFromCache, defaultValue: true, isOptional: true }),
6102
+ __metadata("design:type", Boolean)
6103
+ ], GetFriendStatisticsLeaderboardOperationRequest.prototype, "loadFromCache", void 0);
6069
6104
  class ServerGetFriendStatisticsLeaderboardOperationRequest extends GetFriendStatisticsLeaderboardOperationRequest {
6070
6105
  isValidRequest() {
6071
6106
  if (!super.isValidRequest())
@@ -6102,7 +6137,8 @@ class GetFriendStatisticsLeaderboardRequestHandler extends CharacterPlayerBaseRe
6102
6137
  characterId: request.characterId,
6103
6138
  skip: request.skip,
6104
6139
  limit: request.limit,
6105
- infoRequestParam: request.infoRequestParam
6140
+ infoRequestParam: request.infoRequestParam,
6141
+ loadFromCache: request.loadFromCache,
6106
6142
  }, secretInfo, operationRequest);
6107
6143
  });
6108
6144
  }
@@ -6121,7 +6157,8 @@ class GetFriendStatisticsLeaderboardRequestHandler extends CharacterPlayerBaseRe
6121
6157
  characterId: request.characterId,
6122
6158
  skip: request.skip,
6123
6159
  limit: request.limit,
6124
- infoRequestParam: request.infoRequestParam
6160
+ infoRequestParam: request.infoRequestParam,
6161
+ loadFromCache: request.loadFromCache,
6125
6162
  }, secretInfo, operationRequest);
6126
6163
  });
6127
6164
  }
@@ -6140,7 +6177,8 @@ class GetFriendStatisticsLeaderboardRequestHandler extends CharacterPlayerBaseRe
6140
6177
  characterId: request.characterId,
6141
6178
  skip: request.skip,
6142
6179
  limit: request.limit,
6143
- infoRequestParam: request.infoRequestParam
6180
+ infoRequestParam: request.infoRequestParam,
6181
+ loadFromCache: request.loadFromCache,
6144
6182
  }, secretInfo, operationRequest);
6145
6183
  });
6146
6184
  }
@@ -6152,35 +6190,45 @@ class GetFriendStatisticsLeaderboardRequestHandler extends CharacterPlayerBaseRe
6152
6190
  }
6153
6191
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
6154
6192
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
6155
- let characterPlayerFindOptions = this.convertToCharacterPlayerFindOptions(request.infoRequestParam);
6156
- if (characterPlayerFindOptions != null)
6157
- characterPlayerFindOptions.playerStatistics = true;
6158
- let masterPlayerSettings = this.gnServer.getGNSettings().getCharacterPlayerSettings(secretInfo.getGameId());
6159
- let playerStatisticsSettingsItem = masterPlayerSettings.playerStatisticsSettings.find(x => x.key == request.key);
6193
+ let characterPlayerSettings = this.gnServer.getGNSettings().getCharacterPlayerSettings(secretInfo.getGameId());
6194
+ let playerStatisticsSettingsItem = characterPlayerSettings.playerStatisticsSettings.find(x => x.key == request.key);
6160
6195
  if (playerStatisticsSettingsItem == null) {
6161
6196
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.KeyNotFound);
6162
6197
  return operationResponse;
6163
6198
  }
6164
- let characterPlayer = yield this.gnServer.getDatabase().loadCharacterPlayerAsync(request.characterId, secretInfo.getGameId(), { playerFriends: true, playerStatistics: true });
6165
- if (characterPlayer == null) {
6166
- operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.CharacterPlayerNotFound);
6167
- return operationResponse;
6199
+ let cacheKey = "characterPlayerStatisticsLeaderboardFriend_" + request.characterId;
6200
+ if (request.loadFromCache) {
6201
+ if (!this.gnServer.getCacheData().isValid(cacheKey)) {
6202
+ request.loadFromCache = false;
6203
+ }
6168
6204
  }
6169
6205
  let gnResults = new GNData_1.GNArray();
6170
- let friendIds = [];
6171
- let allPlayerFriends = characterPlayer.getAllPlayerFriends();
6172
- for (let i = 0; i < allPlayerFriends.length; i++) {
6173
- let playerFriendItem = allPlayerFriends[i];
6174
- if (playerFriendItem.status == FriendStatus_1.FriendStatus.Friend) {
6175
- friendIds.push(playerFriendItem.friendId);
6176
- }
6177
- }
6178
- let allCharacterPlayers = yield this.gnServer.getDatabase().loadFriendCharacterPlayersLeaderboardWithStatisticsAsync(friendIds, secretInfo.getGameId(), characterPlayerFindOptions);
6179
- allCharacterPlayers.push(characterPlayer);
6180
- let statisticsAggregationMethod = playerStatisticsSettingsItem.statisticsAggregationMethod;
6181
- let characterPlayers = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum
6182
- ? GetFriendStatisticsLeaderboardRequestHandler.quickSortAsc(request.key, allCharacterPlayers, playerStatisticsSettingsItem.initialValue)
6183
- : GetFriendStatisticsLeaderboardRequestHandler.quickSort(request.key, allCharacterPlayers, playerStatisticsSettingsItem.initialValue);
6206
+ let characterPlayers;
6207
+ if (request.loadFromCache) {
6208
+ characterPlayers = this.gnServer.getCacheData().getData(cacheKey);
6209
+ }
6210
+ else {
6211
+ let characterPlayer = yield this.gnServer.getDatabase().loadCharacterPlayerAsync(request.characterId, secretInfo.getGameId(), null);
6212
+ if (characterPlayer == null) {
6213
+ operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.CharacterPlayerNotFound);
6214
+ return operationResponse;
6215
+ }
6216
+ let friendIds = [];
6217
+ let allPlayerFriends = characterPlayer.getAllPlayerFriends();
6218
+ for (let i = 0; i < allPlayerFriends.length; i++) {
6219
+ let playerFriendItem = allPlayerFriends[i];
6220
+ if (playerFriendItem.status == FriendStatus_1.FriendStatus.Friend) {
6221
+ friendIds.push(playerFriendItem.friendId);
6222
+ }
6223
+ }
6224
+ let allCharacterPlayers = yield this.gnServer.getDatabase().loadFriendCharacterPlayersLeaderboardWithStatisticsAsync(friendIds, secretInfo.getGameId(), null);
6225
+ allCharacterPlayers.push(characterPlayer);
6226
+ let statisticsAggregationMethod = playerStatisticsSettingsItem.statisticsAggregationMethod;
6227
+ characterPlayers = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum
6228
+ ? GetFriendStatisticsLeaderboardRequestHandler.quickSortAsc(request.key, allCharacterPlayers, playerStatisticsSettingsItem.initialValue)
6229
+ : GetFriendStatisticsLeaderboardRequestHandler.quickSort(request.key, allCharacterPlayers, playerStatisticsSettingsItem.initialValue);
6230
+ this.gnServer.getCacheData().setData(cacheKey, characterPlayers, xDatetime_1.xDatetime.ONE_MINUTE_MILLISECOND * 5);
6231
+ }
6184
6232
  for (let i = request.skip; i < request.skip + request.limit; i++) {
6185
6233
  if (i >= characterPlayers.length)
6186
6234
  break;
@@ -6193,6 +6241,7 @@ class GetFriendStatisticsLeaderboardRequestHandler extends CharacterPlayerBaseRe
6193
6241
  }
6194
6242
  operationResponse.setParameter(GNParameterCode_1.GNParameterCode.Results, gnResults);
6195
6243
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.Ok);
6244
+ yield this.gnServer.getPostEventCallbackService().onEvent("characterPlayer_GetFriendStatisticsLeaderboard", request, secretInfo, operationRequest, operationResponse);
6196
6245
  return operationResponse;
6197
6246
  });
6198
6247
  }
@@ -8572,6 +8621,7 @@ const GNErrorCode_1 = __webpack_require__(94559);
8572
8621
  const CharacterPlayerBaseRequestHandler_1 = __webpack_require__(91203);
8573
8622
  const InfoRequestParam_1 = __webpack_require__(21803);
8574
8623
  const xStatisticsAggregationMethod_1 = __webpack_require__(21554);
8624
+ const xDatetime_1 = __webpack_require__(21817);
8575
8625
  class GetStatisticsLeaderboardAroundPlayerOperationRequest extends OperationRequest_1.OperationRequest {
8576
8626
  isValidRequest() {
8577
8627
  if (!super.isValidRequest())
@@ -8599,6 +8649,14 @@ __decorate([
8599
8649
  (0, DataMember_1.NumberDataMember)({ code: GNParameterCode_1.GNParameterCode.Limit, defaultValue: 10, minValue: 1, maxValue: 100, mustInt: true, isOptional: true }),
8600
8650
  __metadata("design:type", Number)
8601
8651
  ], GetStatisticsLeaderboardAroundPlayerOperationRequest.prototype, "limit", void 0);
8652
+ __decorate([
8653
+ (0, DataMember_1.BooleanDataMember)({ code: GNParameterCode_1.GNParameterCode.LoadFromCache, defaultValue: true, isOptional: true }),
8654
+ __metadata("design:type", Boolean)
8655
+ ], GetStatisticsLeaderboardAroundPlayerOperationRequest.prototype, "loadFromCache", void 0);
8656
+ __decorate([
8657
+ (0, DataMember_1.StringDataMember)({ code: GNParameterCode_1.GNParameterCode.CatalogId, minLength: 2, maxLength: 32, mustNonNull: true, isOptional: true }),
8658
+ __metadata("design:type", String)
8659
+ ], GetStatisticsLeaderboardAroundPlayerOperationRequest.prototype, "catalogId", void 0);
8602
8660
  class ServerGetStatisticsLeaderboardAroundPlayerOperationRequest extends GetStatisticsLeaderboardAroundPlayerOperationRequest {
8603
8661
  isValidRequest() {
8604
8662
  if (!super.isValidRequest())
@@ -8636,7 +8694,9 @@ class GetStatisticsLeaderboardAroundPlayerRequestHandler extends CharacterPlayer
8636
8694
  key: request.key,
8637
8695
  skip: request.skip,
8638
8696
  limit: request.limit,
8639
- infoRequestParam: request.infoRequestParam
8697
+ infoRequestParam: request.infoRequestParam,
8698
+ loadFromCache: request.loadFromCache,
8699
+ catalogId: request.catalogId,
8640
8700
  }, secretInfo, operationRequest);
8641
8701
  });
8642
8702
  }
@@ -8655,7 +8715,9 @@ class GetStatisticsLeaderboardAroundPlayerRequestHandler extends CharacterPlayer
8655
8715
  key: request.key,
8656
8716
  skip: request.skip,
8657
8717
  limit: request.limit,
8658
- infoRequestParam: request.infoRequestParam
8718
+ infoRequestParam: request.infoRequestParam,
8719
+ loadFromCache: request.loadFromCache,
8720
+ catalogId: request.catalogId,
8659
8721
  }, secretInfo, operationRequest);
8660
8722
  });
8661
8723
  }
@@ -8674,7 +8736,9 @@ class GetStatisticsLeaderboardAroundPlayerRequestHandler extends CharacterPlayer
8674
8736
  key: request.key,
8675
8737
  skip: request.skip,
8676
8738
  limit: request.limit,
8677
- infoRequestParam: request.infoRequestParam
8739
+ infoRequestParam: request.infoRequestParam,
8740
+ loadFromCache: request.loadFromCache,
8741
+ catalogId: request.catalogId,
8678
8742
  }, secretInfo, operationRequest);
8679
8743
  });
8680
8744
  }
@@ -8686,25 +8750,79 @@ class GetStatisticsLeaderboardAroundPlayerRequestHandler extends CharacterPlayer
8686
8750
  }
8687
8751
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
8688
8752
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
8689
- let characterPlayerFindOptions = this.convertToCharacterPlayerFindOptions(request.infoRequestParam);
8690
- let masterPlayerSettings = this.gnServer.getGNSettings().getCharacterPlayerSettings(secretInfo.getGameId());
8691
- let playerStatisticsSettingsItem = masterPlayerSettings.playerStatisticsSettings.find(x => x.key == request.key);
8753
+ let characterPlayerSettings = this.gnServer.getGNSettings().getCharacterPlayerSettings(secretInfo.getGameId());
8754
+ let playerStatisticsSettingsItem = characterPlayerSettings.playerStatisticsSettings.find(x => x.key == request.key);
8692
8755
  if (playerStatisticsSettingsItem == null) {
8693
8756
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.KeyNotFound);
8694
8757
  return operationResponse;
8695
8758
  }
8696
- let statisticsAggregationMethod = playerStatisticsSettingsItem.statisticsAggregationMethod;
8697
- let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
8759
+ let positionCacheKey = "characterPlayerStatisticsLeaderboardAroundPosition_" + request.characterId + "_" + request.key;
8760
+ let cacheKey = "characterPlayerStatisticsLeaderboardAround_" + request.characterId + "_" + request.key;
8761
+ if (request.catalogId) {
8762
+ cacheKey += "_" + request.catalogId;
8763
+ positionCacheKey += "_" + request.catalogId;
8764
+ }
8765
+ if (request.loadFromCache) {
8766
+ if (request.skip + request.limit > 100) {
8767
+ request.loadFromCache = false;
8768
+ }
8769
+ }
8770
+ if (request.loadFromCache) {
8771
+ if (!this.gnServer.getCacheData().isValid(cacheKey) || !this.gnServer.getCacheData().isValid(positionCacheKey)) {
8772
+ request.loadFromCache = false;
8773
+ }
8774
+ }
8698
8775
  let gnResults = new GNData_1.GNArray();
8699
- let thisPosition = yield this.gnServer.getDatabase().loadPositionCharacterPlayerLeaderboardWithStatisticsAsync(request.key, request.characterId, secretInfo.getGameId(), playerStatisticsSettingsItem.initialValue, direction);
8700
- let characterPlayers = yield this.gnServer.getDatabase().loadCharacterPlayersLeaderboardWithStatisticsAsync(request.key, thisPosition + request.skip, request.limit, secretInfo.getGameId(), direction, characterPlayerFindOptions);
8701
- for (let i = 0; i < characterPlayers.length; i++) {
8702
- let characterPlayer = characterPlayers[i];
8703
- let gnResult = new GNData_1.GNHashtable();
8704
- gnResult.add(GNParameterCode_1.GNParameterCode.Position, i + thisPosition + request.skip);
8705
- gnResult.add(GNParameterCode_1.GNParameterCode.CharacterId, characterPlayer.getCharacterId());
8706
- gnResult.add(GNParameterCode_1.GNParameterCode.InfoResponseParameters, this.generateInfoResponseParameters(characterPlayer, request.infoRequestParam, secretInfo.getGameId()));
8707
- gnResults.add(gnResult);
8776
+ let thisPosition;
8777
+ let characterPlayers;
8778
+ if (request.loadFromCache) {
8779
+ thisPosition = this.gnServer.getCacheData().getData(positionCacheKey);
8780
+ characterPlayers = this.gnServer.getCacheData().getData(cacheKey);
8781
+ for (let i = request.skip; i < request.skip + request.limit; i++) {
8782
+ if (i >= characterPlayers.length)
8783
+ break;
8784
+ let characterPlayer = characterPlayers[i];
8785
+ let gnResult = new GNData_1.GNHashtable();
8786
+ gnResult.add(GNParameterCode_1.GNParameterCode.Position, i + thisPosition);
8787
+ gnResult.add(GNParameterCode_1.GNParameterCode.CharacterId, characterPlayer.getCharacterId());
8788
+ gnResult.add(GNParameterCode_1.GNParameterCode.InfoResponseParameters, this.generateInfoResponseParameters(characterPlayer, request.infoRequestParam, secretInfo.getGameId()));
8789
+ gnResults.add(gnResult);
8790
+ }
8791
+ }
8792
+ else {
8793
+ let statisticsAggregationMethod = playerStatisticsSettingsItem.statisticsAggregationMethod;
8794
+ let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
8795
+ thisPosition = yield this.gnServer.getDatabase().loadPositionCharacterPlayerLeaderboardWithStatisticsAsync(request.key, request.characterId, request.catalogId, secretInfo.getGameId(), playerStatisticsSettingsItem.initialValue, direction);
8796
+ if (thisPosition != -1) {
8797
+ this.gnServer.getCacheData().setData(positionCacheKey, thisPosition, xDatetime_1.xDatetime.ONE_MINUTE_MILLISECOND * 5);
8798
+ let characterPlayerFindOptions = this.convertToCharacterPlayerFindOptions(request.infoRequestParam);
8799
+ if (request.skip + request.limit <= 100) {
8800
+ characterPlayerFindOptions = null;
8801
+ characterPlayers = yield this.gnServer.getDatabase().loadCharacterPlayersLeaderboardWithStatisticsAsync(request.key, thisPosition, 100, request.catalogId, secretInfo.getGameId(), direction, characterPlayerFindOptions);
8802
+ for (let i = request.skip; i < request.skip + request.limit; i++) {
8803
+ if (i >= characterPlayers.length)
8804
+ break;
8805
+ let characterPlayer = characterPlayers[i];
8806
+ let gnResult = new GNData_1.GNHashtable();
8807
+ gnResult.add(GNParameterCode_1.GNParameterCode.Position, i + thisPosition);
8808
+ gnResult.add(GNParameterCode_1.GNParameterCode.CharacterId, characterPlayer.getCharacterId());
8809
+ gnResult.add(GNParameterCode_1.GNParameterCode.InfoResponseParameters, this.generateInfoResponseParameters(characterPlayer, request.infoRequestParam, secretInfo.getGameId()));
8810
+ gnResults.add(gnResult);
8811
+ }
8812
+ this.gnServer.getCacheData().setData(cacheKey, characterPlayers, xDatetime_1.xDatetime.ONE_MINUTE_MILLISECOND * 5);
8813
+ }
8814
+ else {
8815
+ characterPlayers = yield this.gnServer.getDatabase().loadCharacterPlayersLeaderboardWithStatisticsAsync(request.key, thisPosition + request.skip, request.limit, request.catalogId, secretInfo.getGameId(), direction, characterPlayerFindOptions);
8816
+ for (let i = 0; i < characterPlayers.length; i++) {
8817
+ let characterPlayer = characterPlayers[i];
8818
+ let gnResult = new GNData_1.GNHashtable();
8819
+ gnResult.add(GNParameterCode_1.GNParameterCode.Position, i + thisPosition + request.skip);
8820
+ gnResult.add(GNParameterCode_1.GNParameterCode.CharacterId, characterPlayer.getCharacterId());
8821
+ gnResult.add(GNParameterCode_1.GNParameterCode.InfoResponseParameters, this.generateInfoResponseParameters(characterPlayer, request.infoRequestParam, secretInfo.getGameId()));
8822
+ gnResults.add(gnResult);
8823
+ }
8824
+ }
8825
+ }
8708
8826
  }
8709
8827
  operationResponse.setParameter(GNParameterCode_1.GNParameterCode.Results, gnResults);
8710
8828
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.Ok);
@@ -8786,6 +8904,10 @@ __decorate([
8786
8904
  (0, DataMember_1.StringDataMember)({ code: GNParameterCode_1.GNParameterCode.Version, minLength: 2, maxLength: 32, mustNonNull: true, isOptional: true }),
8787
8905
  __metadata("design:type", String)
8788
8906
  ], GetStatisticsLeaderboardOperationRequest.prototype, "version", void 0);
8907
+ __decorate([
8908
+ (0, DataMember_1.StringDataMember)({ code: GNParameterCode_1.GNParameterCode.CatalogId, minLength: 2, maxLength: 32, mustNonNull: true, isOptional: true }),
8909
+ __metadata("design:type", String)
8910
+ ], GetStatisticsLeaderboardOperationRequest.prototype, "catalogId", void 0);
8789
8911
  class ServerGetStatisticsLeaderboardOperationRequest extends GetStatisticsLeaderboardOperationRequest {
8790
8912
  isValidRequest() {
8791
8913
  if (!super.isValidRequest())
@@ -8827,6 +8949,7 @@ class GetStatisticsLeaderboardRequestHandler extends CharacterPlayerBaseRequestH
8827
8949
  infoRequestParam: request.infoRequestParam,
8828
8950
  loadFromCache: request.loadFromCache,
8829
8951
  version: request.version,
8952
+ catalogId: request.catalogId,
8830
8953
  }, secretInfo, operationRequest);
8831
8954
  });
8832
8955
  }
@@ -8847,6 +8970,7 @@ class GetStatisticsLeaderboardRequestHandler extends CharacterPlayerBaseRequestH
8847
8970
  infoRequestParam: request.infoRequestParam,
8848
8971
  loadFromCache: request.loadFromCache,
8849
8972
  version: request.version,
8973
+ catalogId: request.catalogId,
8850
8974
  }, secretInfo, operationRequest);
8851
8975
  });
8852
8976
  }
@@ -8867,6 +8991,7 @@ class GetStatisticsLeaderboardRequestHandler extends CharacterPlayerBaseRequestH
8867
8991
  infoRequestParam: request.infoRequestParam,
8868
8992
  loadFromCache: request.loadFromCache,
8869
8993
  version: request.version,
8994
+ catalogId: request.catalogId,
8870
8995
  }, secretInfo, operationRequest);
8871
8996
  });
8872
8997
  }
@@ -8878,15 +9003,16 @@ class GetStatisticsLeaderboardRequestHandler extends CharacterPlayerBaseRequestH
8878
9003
  }
8879
9004
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
8880
9005
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
8881
- let characterPlayerFindOptions = this.convertToCharacterPlayerFindOptions(request.infoRequestParam);
8882
- let masterPlayerSettings = this.gnServer.getGNSettings().getCharacterPlayerSettings(secretInfo.getGameId());
8883
- let playerStatisticsSettingsItem = masterPlayerSettings.playerStatisticsSettings.find(x => x.key == request.key);
9006
+ let characterPlayerSettings = this.gnServer.getGNSettings().getCharacterPlayerSettings(secretInfo.getGameId());
9007
+ let playerStatisticsSettingsItem = characterPlayerSettings.playerStatisticsSettings.find(x => x.key == request.key);
8884
9008
  if (playerStatisticsSettingsItem == null) {
8885
9009
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.KeyNotFound);
8886
9010
  return operationResponse;
8887
9011
  }
8888
9012
  if (!request.version) {
8889
9013
  let cacheKey = "characterPlayerStatisticsLeaderboard_" + request.key;
9014
+ if (request.catalogId)
9015
+ cacheKey += "_" + request.catalogId;
8890
9016
  if (request.loadFromCache) {
8891
9017
  if (request.skip + request.limit > 100) {
8892
9018
  request.loadFromCache = false;
@@ -8897,8 +9023,6 @@ class GetStatisticsLeaderboardRequestHandler extends CharacterPlayerBaseRequestH
8897
9023
  request.loadFromCache = false;
8898
9024
  }
8899
9025
  }
8900
- let statisticsAggregationMethod = playerStatisticsSettingsItem.statisticsAggregationMethod;
8901
- let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
8902
9026
  let gnResults = new GNData_1.GNArray();
8903
9027
  let characterPlayers;
8904
9028
  if (request.loadFromCache) {
@@ -8915,9 +9039,12 @@ class GetStatisticsLeaderboardRequestHandler extends CharacterPlayerBaseRequestH
8915
9039
  }
8916
9040
  }
8917
9041
  else {
9042
+ let characterPlayerFindOptions = this.convertToCharacterPlayerFindOptions(request.infoRequestParam);
9043
+ let statisticsAggregationMethod = playerStatisticsSettingsItem.statisticsAggregationMethod;
9044
+ let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
8918
9045
  if (request.skip + request.limit <= 100) {
8919
9046
  characterPlayerFindOptions = null;
8920
- characterPlayers = yield this.gnServer.getDatabase().loadCharacterPlayersLeaderboardWithStatisticsAsync(request.key, 0, 100, secretInfo.getGameId(), direction, characterPlayerFindOptions);
9047
+ characterPlayers = yield this.gnServer.getDatabase().loadCharacterPlayersLeaderboardWithStatisticsAsync(request.key, 0, 100, request.catalogId, secretInfo.getGameId(), direction, characterPlayerFindOptions);
8921
9048
  for (let i = request.skip; i < request.skip + request.limit; i++) {
8922
9049
  if (i >= characterPlayers.length)
8923
9050
  break;
@@ -8931,7 +9058,7 @@ class GetStatisticsLeaderboardRequestHandler extends CharacterPlayerBaseRequestH
8931
9058
  this.gnServer.getCacheData().setData(cacheKey, characterPlayers, xDatetime_1.xDatetime.ONE_MINUTE_MILLISECOND * 5);
8932
9059
  }
8933
9060
  else {
8934
- characterPlayers = yield this.gnServer.getDatabase().loadCharacterPlayersLeaderboardWithStatisticsAsync(request.key, request.skip, request.limit, secretInfo.getGameId(), direction, characterPlayerFindOptions);
9061
+ characterPlayers = yield this.gnServer.getDatabase().loadCharacterPlayersLeaderboardWithStatisticsAsync(request.key, request.skip, request.limit, request.catalogId, secretInfo.getGameId(), direction, characterPlayerFindOptions);
8935
9062
  for (let i = 0; i < characterPlayers.length; i++) {
8936
9063
  let characterPlayer = characterPlayers[i];
8937
9064
  let gnResult = new GNData_1.GNHashtable();
@@ -9131,11 +9258,11 @@ class GetStatisticsLogRequestHandler extends RequestHandler_1.RequestHandler {
9131
9258
  }
9132
9259
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
9133
9260
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
9134
- let masterPlayerSettings = this.gnServer.getGNSettings().getCharacterPlayerSettings(secretInfo.getGameId());
9261
+ let characterPlayerSettings = this.gnServer.getGNSettings().getCharacterPlayerSettings(secretInfo.getGameId());
9135
9262
  let keys = [];
9136
9263
  if (request.keys) {
9137
9264
  for (let i = 0; i < request.keys.length; i++) {
9138
- let playerStatisticsSettingsItem = masterPlayerSettings.playerStatisticsSettings.find(x => x.key == request.keys[i]);
9265
+ let playerStatisticsSettingsItem = characterPlayerSettings.playerStatisticsSettings.find(x => x.key == request.keys[i]);
9139
9266
  if (playerStatisticsSettingsItem != null) {
9140
9267
  keys.push(playerStatisticsSettingsItem.key);
9141
9268
  }
@@ -9888,7 +10015,7 @@ __decorate([
9888
10015
  __metadata("design:type", String)
9889
10016
  ], GrantPlayerItemOperationRequest.prototype, "displayName", void 0);
9890
10017
  __decorate([
9891
- (0, DataMember_1.NumberDataMember)({ code: GNParameterCode_1.GNParameterCode.Amount, defaultValue: 1, isOptional: true }),
10018
+ (0, DataMember_1.NumberDataMember)({ code: GNParameterCode_1.GNParameterCode.Amount, defaultValue: 1, mustInt: true, isOptional: true }),
9892
10019
  __metadata("design:type", Number)
9893
10020
  ], GrantPlayerItemOperationRequest.prototype, "amount", void 0);
9894
10021
  class ServerGrantPlayerItemOperationRequest extends GrantPlayerItemOperationRequest {
@@ -9995,7 +10122,7 @@ class GrantPlayerItemRequestHandler extends CharacterPlayerBaseRequestHandler_1.
9995
10122
  return operationResponse;
9996
10123
  }
9997
10124
  let amount = request.amount;
9998
- if (playerItemCatalogSettingsItem.itemType == ItemType_1.ItemType.NonConsumable) {
10125
+ if (playerItemCatalogSettingsItem.itemType == ItemType_1.ItemType.NonStackable) {
9999
10126
  amount = 1;
10000
10127
  }
10001
10128
  let itemId = StringUtility_1.StringUtility.generateRandomString(12, this.gnServer.getIdTypeCase());
@@ -14822,6 +14949,7 @@ const GNErrorCode_1 = __webpack_require__(94559);
14822
14949
  const GNParameterCode_1 = __webpack_require__(38343);
14823
14950
  const Md5Generate_1 = __webpack_require__(38632);
14824
14951
  const StringUtility_1 = __webpack_require__(77468);
14952
+ const xDatetime_1 = __webpack_require__(21817);
14825
14953
  class RequestDownloadFileUploadInfoOperationRequest extends OperationRequest_1.OperationRequest {
14826
14954
  isValidRequest() {
14827
14955
  if (!super.isValidRequest())
@@ -14922,7 +15050,7 @@ class RequestDownloadFileUploadInfoRequestHandler extends RequestHandler_1.Reque
14922
15050
  let collection = this.gnServer.getDatabase().systemCollection("DownloadFileSession");
14923
15051
  collection.insertOne({
14924
15052
  fileId: request.fileId,
14925
- createdAt: new Date(),
15053
+ createdAt: xDatetime_1.xDatetime.getCurrentDate(),
14926
15054
  downloadToken: downloadToken,
14927
15055
  isValid: true,
14928
15056
  });
@@ -15365,8 +15493,10 @@ class DeleteInDatabaseRequestHandler extends RequestHandler_1.RequestHandler {
15365
15493
  this.gnServer.getDatabase().runtimeCollection("DeleteInDatabaseLog").insertOne(result);
15366
15494
  let gamePlayer = yield this.gnServer.getDatabase().loadGamePlayerAsync(characterPlayer.getOwner().id, request.gameId);
15367
15495
  if (gamePlayer != null) {
15368
- gamePlayer.removePlayerCharacter(characterPlayer.getCharacterId());
15369
- gamePlayer.saveAsync();
15496
+ if (gamePlayer.hasPlayerCharacter(characterPlayer.getCharacterId())) {
15497
+ gamePlayer.removePlayerCharacter(characterPlayer.getCharacterId());
15498
+ gamePlayer.saveAsync();
15499
+ }
15370
15500
  }
15371
15501
  }
15372
15502
  else if (request.type == OwnerType_1.OwnerType.Inventory) {
@@ -15388,22 +15518,28 @@ class DeleteInDatabaseRequestHandler extends RequestHandler_1.RequestHandler {
15388
15518
  if (owner.type == OwnerType_1.OwnerType.GamePlayer) {
15389
15519
  let gamePlayer = yield this.gnServer.getDatabase().loadGamePlayerAsync(inventory.getOwner().id, request.gameId);
15390
15520
  if (gamePlayer != null) {
15391
- gamePlayer.removePlayerInventory(inventory.getItemId());
15392
- gamePlayer.saveAsync();
15521
+ if (gamePlayer.hasPlayerInventory(inventory.getItemId())) {
15522
+ gamePlayer.removePlayerInventory(inventory.getItemId());
15523
+ gamePlayer.saveAsync();
15524
+ }
15393
15525
  }
15394
15526
  }
15395
15527
  else if (owner.type == OwnerType_1.OwnerType.CharacterPlayer) {
15396
15528
  let characterPlayer = yield this.gnServer.getDatabase().loadCharacterPlayerAsync(inventory.getOwner().id, request.gameId);
15397
15529
  if (characterPlayer != null) {
15398
- characterPlayer.removePlayerInventory(inventory.getItemId());
15399
- characterPlayer.saveAsync();
15530
+ if (characterPlayer.hasPlayerInventory(inventory.getItemId())) {
15531
+ characterPlayer.removePlayerInventory(inventory.getItemId());
15532
+ characterPlayer.saveAsync();
15533
+ }
15400
15534
  }
15401
15535
  }
15402
15536
  else if (owner.type == OwnerType_1.OwnerType.Group) {
15403
15537
  let group = yield this.gnServer.getDatabase().loadGroupAsync(inventory.getOwner().id, request.gameId);
15404
15538
  if (group != null) {
15405
- group.removeGroupInventory(inventory.getItemId());
15406
- group.saveAsync();
15539
+ if (group.hasGroupInventory(inventory.getItemId())) {
15540
+ group.removeGroupInventory(inventory.getItemId());
15541
+ group.saveAsync();
15542
+ }
15407
15543
  }
15408
15544
  }
15409
15545
  }
@@ -15422,27 +15558,19 @@ class DeleteInDatabaseRequestHandler extends RequestHandler_1.RequestHandler {
15422
15558
  if (memberId.length == 11) {
15423
15559
  let characterPlayer = yield this.gnServer.getDatabase().loadCharacterPlayerAsync(memberId, request.gameId);
15424
15560
  if (characterPlayer != null) {
15425
- objs.push({
15426
- type: "Group.Member",
15427
- obj: {
15428
- memberId: memberId,
15429
- }
15430
- });
15431
- characterPlayer.removePlayerGroup(groupId);
15432
- characterPlayer.saveAsync();
15561
+ if (characterPlayer.hasPlayerGroup(groupId)) {
15562
+ characterPlayer.removePlayerGroup(groupId);
15563
+ characterPlayer.saveAsync();
15564
+ }
15433
15565
  }
15434
15566
  }
15435
15567
  else if (memberId.length == 10) {
15436
15568
  let gamePlayer = yield this.gnServer.getDatabase().loadGamePlayerAsync(memberId, request.gameId);
15437
15569
  if (gamePlayer != null) {
15438
- objs.push({
15439
- type: "Group.Member",
15440
- obj: {
15441
- memberId: memberId,
15442
- }
15443
- });
15444
- gamePlayer.removePlayerGroup(groupId);
15445
- gamePlayer.saveAsync();
15570
+ if (gamePlayer.hasPlayerGroup(groupId)) {
15571
+ gamePlayer.removePlayerGroup(groupId);
15572
+ gamePlayer.saveAsync();
15573
+ }
15446
15574
  }
15447
15575
  }
15448
15576
  }
@@ -15931,13 +16059,9 @@ class DeleteInDatabaseRequestHandler extends RequestHandler_1.RequestHandler {
15931
16059
  return __awaiter(this, void 0, void 0, function* () {
15932
16060
  let answer = [];
15933
16061
  let userId = gamePlayer.getUserId();
15934
- answer.push({
15935
- type: "GamePlayer.Friend",
15936
- obj: {
15937
- friendId: userId,
15938
- }
15939
- });
15940
- friendPlayer.removePlayerFriend(userId);
16062
+ if (friendPlayer.hasPlayerFriend(userId)) {
16063
+ friendPlayer.removePlayerGroup(userId);
16064
+ }
15941
16065
  return answer;
15942
16066
  });
15943
16067
  }
@@ -15945,13 +16069,9 @@ class DeleteInDatabaseRequestHandler extends RequestHandler_1.RequestHandler {
15945
16069
  return __awaiter(this, void 0, void 0, function* () {
15946
16070
  let answer = [];
15947
16071
  let characterId = characterPlayer.getCharacterId();
15948
- answer.push({
15949
- type: "CharacterPlayer.Friend",
15950
- obj: {
15951
- friendId: characterId,
15952
- }
15953
- });
15954
- friendPlayer.removePlayerFriend(characterId);
16072
+ if (friendPlayer.hasPlayerFriend(characterId)) {
16073
+ friendPlayer.removePlayerGroup(characterId);
16074
+ }
15955
16075
  return answer;
15956
16076
  });
15957
16077
  }
@@ -15959,15 +16079,11 @@ class DeleteInDatabaseRequestHandler extends RequestHandler_1.RequestHandler {
15959
16079
  return __awaiter(this, void 0, void 0, function* () {
15960
16080
  let answer = [];
15961
16081
  let userId = gamePlayer.getUserId();
15962
- group.removeMember(userId);
16082
+ if (group.hasMember(userId)) {
16083
+ group.removeMember(userId);
16084
+ }
15963
16085
  let groupId = group.getGroupId();
15964
16086
  this.gnServer.getCacheData().removeData("GroupMessages_" + groupId);
15965
- answer.push({
15966
- type: "GamePlayer.Group",
15967
- obj: {
15968
- groupId: groupId,
15969
- }
15970
- });
15971
16087
  return answer;
15972
16088
  });
15973
16089
  }
@@ -15975,15 +16091,11 @@ class DeleteInDatabaseRequestHandler extends RequestHandler_1.RequestHandler {
15975
16091
  return __awaiter(this, void 0, void 0, function* () {
15976
16092
  let answer = [];
15977
16093
  let characterId = characterPlayer.getCharacterId();
15978
- group.removeMember(characterId);
16094
+ if (group.hasMember(characterId)) {
16095
+ group.removeMember(characterId);
16096
+ }
15979
16097
  let groupId = group.getGroupId();
15980
16098
  this.gnServer.getCacheData().removeData("GroupMessages_" + groupId);
15981
- answer.push({
15982
- type: "CharacterPlayer.Member",
15983
- obj: {
15984
- groupId: groupId,
15985
- }
15986
- });
15987
16099
  return answer;
15988
16100
  });
15989
16101
  }
@@ -16140,6 +16252,14 @@ __decorate([
16140
16252
  (0, DataMember_1.BooleanDataMember)({ code: GNParameterCode_1.GNParameterCode.DatabaseSystem, isOptional: true }),
16141
16253
  __metadata("design:type", Boolean)
16142
16254
  ], GetAnalyticsOperationRequest.prototype, "databaseSystem", void 0);
16255
+ __decorate([
16256
+ (0, DataMember_1.BooleanDataMember)({ code: GNParameterCode_1.GNParameterCode.Cost, isOptional: true }),
16257
+ __metadata("design:type", Boolean)
16258
+ ], GetAnalyticsOperationRequest.prototype, "cost", void 0);
16259
+ __decorate([
16260
+ (0, DataMember_1.BooleanDataMember)({ code: GNParameterCode_1.GNParameterCode.MonthlyCost, isOptional: true }),
16261
+ __metadata("design:type", Boolean)
16262
+ ], GetAnalyticsOperationRequest.prototype, "monthlyCost", void 0);
16143
16263
  class GetAnalyticsRequestHandler extends RequestHandler_1.RequestHandler {
16144
16264
  getCode() {
16145
16265
  return OperationCode_1.OperationCode.GetAnalytics;
@@ -16164,6 +16284,8 @@ class GetAnalyticsRequestHandler extends RequestHandler_1.RequestHandler {
16164
16284
  operationSystem: request.operationSystem,
16165
16285
  requestComplete: request.requestComplete,
16166
16286
  databaseSystem: request.databaseSystem,
16287
+ cost: request.cost,
16288
+ monthlyCost: request.monthlyCost,
16167
16289
  }
16168
16290
  }, secretInfo, operationRequest);
16169
16291
  });
@@ -16284,6 +16406,28 @@ class GetAnalyticsRequestHandler extends RequestHandler_1.RequestHandler {
16284
16406
  }
16285
16407
  operationResponse.setParameter(GNParameterCode_1.GNParameterCode.RequestComplete, gnRequestComplete);
16286
16408
  }
16409
+ if (request.requestParams.cost) {
16410
+ let gnCost = new GNData_1.GNHashtable();
16411
+ if (bigAnalyticsItem.cost) {
16412
+ gnCost.add(GNParameterCode_1.GNParameterCode.RequestCount, bigAnalyticsItem.cost.requestCount);
16413
+ gnCost.add(GNParameterCode_1.GNParameterCode.MatchmakingRequestCount, bigAnalyticsItem.cost.matchmakingRequestCount);
16414
+ gnCost.add(GNParameterCode_1.GNParameterCode.CloudScriptGBs, bigAnalyticsItem.cost.cloudScriptGBs);
16415
+ gnCost.add(GNParameterCode_1.GNParameterCode.StorageSizeInBytes, bigAnalyticsItem.cost.storageSizeInBytes);
16416
+ gnCost.add(GNParameterCode_1.GNParameterCode.DataTransferSizeInBytes, bigAnalyticsItem.cost.dataTransferSizeInBytes);
16417
+ }
16418
+ operationResponse.setParameter(GNParameterCode_1.GNParameterCode.Cost, gnCost);
16419
+ }
16420
+ if (request.requestParams.monthlyCost) {
16421
+ let gnCost = new GNData_1.GNHashtable();
16422
+ if (bigAnalyticsItem.monthlyCost) {
16423
+ gnCost.add(GNParameterCode_1.GNParameterCode.RequestCount, bigAnalyticsItem.monthlyCost.requestCount);
16424
+ gnCost.add(GNParameterCode_1.GNParameterCode.MatchmakingRequestCount, bigAnalyticsItem.monthlyCost.matchmakingRequestCount);
16425
+ gnCost.add(GNParameterCode_1.GNParameterCode.CloudScriptGBs, bigAnalyticsItem.monthlyCost.cloudScriptGBs);
16426
+ gnCost.add(GNParameterCode_1.GNParameterCode.StorageSizeInBytes, bigAnalyticsItem.monthlyCost.storageSizeInBytes);
16427
+ gnCost.add(GNParameterCode_1.GNParameterCode.DataTransferSizeInBytes, bigAnalyticsItem.monthlyCost.dataTransferSizeInBytes);
16428
+ }
16429
+ operationResponse.setParameter(GNParameterCode_1.GNParameterCode.MonthlyCost, gnCost);
16430
+ }
16287
16431
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.Ok);
16288
16432
  yield this.gnServer.getPostEventCallbackService().onEvent("dashboard_GetAnalytics", request, secretInfo, operationRequest, operationResponse);
16289
16433
  return operationResponse;
@@ -22959,30 +23103,30 @@ class GrantSecretInfoRequestHandler extends RequestHandler_1.RequestHandler {
22959
23103
  getStoreLog: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: true, serverSelfEnable: false, },
22960
23104
  },
22961
23105
  masterAdmin: {
22962
- setMasterGameSettings: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: true, serverSelfEnable: false, },
23106
+ setMasterGameSettings: { selfEnable: true, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
22963
23107
  grantAdminAccount: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
22964
23108
  removeAdminAccount: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
22965
23109
  setPasswordAdminAccount: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
22966
23110
  setSecretKeyAdminAccount: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
22967
23111
  setGameInformation: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
22968
23112
  grantGame: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
22969
- changePasswordAdminAccount: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: true, serverSelfEnable: false, },
23113
+ changePasswordAdminAccount: { selfEnable: true, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
22970
23114
  getAdminAccountList: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
22971
23115
  getGameInformation: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
22972
- getGameList: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: true, serverSelfEnable: false, },
22973
- getMasterGameSettings: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: true, serverSelfEnable: false, },
22974
- getServerLog: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: true, serverSelfEnable: false, },
22975
- getSecretInfoInformation: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: true, serverSelfEnable: false, },
23116
+ getGameList: { selfEnable: true, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
23117
+ getMasterGameSettings: { selfEnable: true, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
23118
+ getServerLog: { selfEnable: true, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
23119
+ getSecretInfoInformation: { selfEnable: true, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
22976
23120
  getSecretInfoList: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
22977
23121
  grantSecretInfo: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
22978
23122
  setSecretInfoInformation: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
22979
- getUsernameAdminAccount: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: true, serverSelfEnable: false, },
22980
- getAnalytics: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: true, serverSelfEnable: false, },
22981
- getEventCallbackCloudScript: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: true, serverSelfEnable: false, },
22982
- setEventCallbackCloudScript: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: true, serverSelfEnable: false, },
22983
- resetStatisticsLeaderboard: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: true, serverSelfEnable: false, },
22984
- getBackupStatisticsLeaderboardVersion: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: true, serverSelfEnable: false, },
22985
- getServerGameData: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: true, serverSelfEnable: false, },
23123
+ getUsernameAdminAccount: { selfEnable: true, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
23124
+ getAnalytics: { selfEnable: true, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
23125
+ getEventCallbackCloudScript: { selfEnable: true, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
23126
+ setEventCallbackCloudScript: { selfEnable: true, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
23127
+ resetStatisticsLeaderboard: { selfEnable: true, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
23128
+ getBackupStatisticsLeaderboardVersion: { selfEnable: true, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
23129
+ getServerGameData: { selfEnable: true, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
22986
23130
  deleteInDatabase: { selfEnable: false, otherSelfEnable: false, adminSelfEnable: false, serverSelfEnable: false, },
22987
23131
  },
22988
23132
  multiplayer: {
@@ -23657,6 +23801,10 @@ __decorate([
23657
23801
  (0, DataMember_1.StringDataMember)({ code: GNParameterCode_1.GNParameterCode.Log, minLength: 1, maxLength: 256, mustNonNull: true, isOptional: true }),
23658
23802
  __metadata("design:type", String)
23659
23803
  ], ResetStatisticsLeaderboardOperationRequest.prototype, "log", void 0);
23804
+ __decorate([
23805
+ (0, DataMember_1.StringDataMember)({ code: GNParameterCode_1.GNParameterCode.CatalogId, minLength: 2, maxLength: 32, mustNonNull: true, isOptional: true }),
23806
+ __metadata("design:type", String)
23807
+ ], ResetStatisticsLeaderboardOperationRequest.prototype, "catalogId", void 0);
23660
23808
  class ResetStatisticsLeaderboardRequestHandler extends RequestHandler_1.RequestHandler {
23661
23809
  getCode() {
23662
23810
  return OperationCode_1.OperationCode.ResetStatisticsLeaderboard;
@@ -23679,6 +23827,7 @@ class ResetStatisticsLeaderboardRequestHandler extends RequestHandler_1.RequestH
23679
23827
  version: request.version,
23680
23828
  gameId: request.gameId,
23681
23829
  log: request.log,
23830
+ catalogId: request.catalogId,
23682
23831
  }, secretInfo, operationRequest);
23683
23832
  });
23684
23833
  }
@@ -23854,7 +24003,7 @@ class ResetStatisticsLeaderboardRequestHandler extends RequestHandler_1.RequestH
23854
24003
  let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
23855
24004
  let characterPlayerCollection = yield this.gnServer.getDatabase().systemGameCollection("CharacterPlayer", gameId);
23856
24005
  xDebug_1.Debug.log("[GN] ResetStatisticsLeaderboard for key " + key + " at " + characterPlayerCollection.collectionName + " starting");
23857
- let characterPlayers = yield this.gnServer.getDatabase().loadCharacterPlayersLeaderboardWithStatisticsAllAsync(key, gameId, direction, characterPlayerFindOptions);
24006
+ let characterPlayers = yield this.gnServer.getDatabase().loadCharacterPlayersLeaderboardWithStatisticsAllAsync(key, request.catalogId, gameId, direction, characterPlayerFindOptions);
23858
24007
  let backupData = {
23859
24008
  key: key,
23860
24009
  version: version,
@@ -23922,7 +24071,7 @@ class ResetStatisticsLeaderboardRequestHandler extends RequestHandler_1.RequestH
23922
24071
  let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
23923
24072
  let groupCollection = yield this.gnServer.getDatabase().systemGameCollection("Group", gameId);
23924
24073
  xDebug_1.Debug.log("[GN] ResetStatisticsLeaderboard for key " + key + " at " + groupCollection.collectionName + " starting");
23925
- let groups = yield this.gnServer.getDatabase().loadGroupsLeaderboardWithStatisticsAllAsync(key, gameId, direction, groupFindOptions);
24074
+ let groups = yield this.gnServer.getDatabase().loadGroupsLeaderboardWithStatisticsAllAsync(key, request.catalogId, gameId, direction, groupFindOptions);
23926
24075
  let backupData = {
23927
24076
  key: key,
23928
24077
  version: version,
@@ -23985,7 +24134,7 @@ class ResetStatisticsLeaderboardRequestHandler extends RequestHandler_1.RequestH
23985
24134
  let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
23986
24135
  let inventoryCollection = yield this.gnServer.getDatabase().systemGameCollection("Inventory", gameId);
23987
24136
  xDebug_1.Debug.log("[GN] ResetStatisticsLeaderboard for key " + key + " at " + inventoryCollection.collectionName + " starting");
23988
- let inventories = yield this.gnServer.getDatabase().loadInventoriesLeaderboardWithStatisticsAllAsync(key, gameId, direction, inventoryFindOptions);
24137
+ let inventories = yield this.gnServer.getDatabase().loadInventoriesLeaderboardWithStatisticsAllAsync(key, request.catalogId, gameId, direction, inventoryFindOptions);
23989
24138
  let backupData = {
23990
24139
  key: key,
23991
24140
  version: version,
@@ -24565,17 +24714,34 @@ class SetGameInformationRequestHandler extends RequestHandler_1.RequestHandler {
24565
24714
  }
24566
24715
  for (let i = 0; i < removeKeyLst.length; i++) {
24567
24716
  let key = removeKeyLst[i];
24568
- let indexName = "playerCurrencies." + key + ".value_-1";
24569
- characterPlayerCollection.dropIndex(indexName);
24570
- xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + characterPlayerCollection.collectionName);
24717
+ {
24718
+ let indexName = "playerCurrencies." + key + ".value_-1";
24719
+ characterPlayerCollection.dropIndex(indexName);
24720
+ xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + characterPlayerCollection.collectionName);
24721
+ }
24722
+ {
24723
+ let indexName = "catalogId_1_" + "playerCurrencies." + key + ".value_-1";
24724
+ characterPlayerCollection.dropIndex(indexName);
24725
+ xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + characterPlayerCollection.collectionName);
24726
+ }
24571
24727
  }
24572
24728
  for (let i = 0; i < addKeyLst.length; i++) {
24573
24729
  let key = addKeyLst[i];
24574
- let indexDoc = {};
24575
- indexDoc["playerCurrencies." + key + ".value"] = -1;
24576
- let indexName = "playerCurrencies." + key + ".value_-1";
24577
- characterPlayerCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
24578
- xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + characterPlayerCollection.collectionName);
24730
+ {
24731
+ let indexDoc = {};
24732
+ indexDoc["playerCurrencies." + key + ".value"] = -1;
24733
+ let indexName = "playerCurrencies." + key + ".value_-1";
24734
+ characterPlayerCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
24735
+ xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + characterPlayerCollection.collectionName);
24736
+ }
24737
+ {
24738
+ let indexDoc = {};
24739
+ indexDoc["catalogId"] = 1;
24740
+ indexDoc["playerCurrencies." + key + ".value"] = -1;
24741
+ let indexName = "catalogId_1_" + "playerCurrencies." + key + ".value_-1";
24742
+ characterPlayerCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
24743
+ xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + characterPlayerCollection.collectionName);
24744
+ }
24579
24745
  }
24580
24746
  }
24581
24747
  if (request.gameSettings.characterPlayerSettings.playerStatisticsSettings != null) {
@@ -24625,18 +24791,36 @@ class SetGameInformationRequestHandler extends RequestHandler_1.RequestHandler {
24625
24791
  }
24626
24792
  for (let i = 0; i < removeKeyLst.length; i++) {
24627
24793
  let key = removeKeyLst[i];
24628
- let indexName = "playerStatistics." + key + ".value_-1_playerStatistics." + key + ".tsLastUpdate_1";
24629
- characterPlayerCollection.dropIndex(indexName);
24630
- xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + characterPlayerCollection.collectionName);
24794
+ {
24795
+ let indexName = "playerStatistics." + key + ".value_-1_playerStatistics." + key + ".tsLastUpdate_1";
24796
+ characterPlayerCollection.dropIndex(indexName);
24797
+ xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + characterPlayerCollection.collectionName);
24798
+ }
24799
+ {
24800
+ let indexName = "catalogId_1_" + "playerStatistics." + key + ".value_-1_playerStatistics." + key + ".tsLastUpdate_1";
24801
+ characterPlayerCollection.dropIndex(indexName);
24802
+ xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + characterPlayerCollection.collectionName);
24803
+ }
24631
24804
  }
24632
24805
  for (let i = 0; i < addKeyLst.length; i++) {
24633
24806
  let key = addKeyLst[i];
24634
- let indexDoc = {};
24635
- indexDoc["playerStatistics." + key + ".value"] = -1;
24636
- indexDoc["playerStatistics." + key + ".tsLastUpdate"] = 1;
24637
- let indexName = "playerStatistics." + key + ".value_-1_playerStatistics." + key + ".tsLastUpdate_1";
24638
- characterPlayerCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
24639
- xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + characterPlayerCollection.collectionName);
24807
+ {
24808
+ let indexDoc = {};
24809
+ indexDoc["playerStatistics." + key + ".value"] = -1;
24810
+ indexDoc["playerStatistics." + key + ".tsLastUpdate"] = 1;
24811
+ let indexName = "playerStatistics." + key + ".value_-1_playerStatistics." + key + ".tsLastUpdate_1";
24812
+ characterPlayerCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
24813
+ xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + characterPlayerCollection.collectionName);
24814
+ }
24815
+ {
24816
+ let indexDoc = {};
24817
+ indexDoc["catalogId"] = 1;
24818
+ indexDoc["playerStatistics." + key + ".value"] = -1;
24819
+ indexDoc["playerStatistics." + key + ".tsLastUpdate"] = 1;
24820
+ let indexName = "catalogId_1_" + "playerStatistics." + key + ".value_-1_playerStatistics." + key + ".tsLastUpdate_1";
24821
+ characterPlayerCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
24822
+ xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + characterPlayerCollection.collectionName);
24823
+ }
24640
24824
  }
24641
24825
  }
24642
24826
  {
@@ -24651,18 +24835,36 @@ class SetGameInformationRequestHandler extends RequestHandler_1.RequestHandler {
24651
24835
  }
24652
24836
  for (let i = 0; i < removeKeyAscLst.length; i++) {
24653
24837
  let key = removeKeyAscLst[i];
24654
- let indexName = "playerStatistics." + key + ".value_1_playerStatistics." + key + ".tsLastUpdate_1";
24655
- characterPlayerCollection.dropIndex(indexName);
24656
- xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + characterPlayerCollection.collectionName);
24838
+ {
24839
+ let indexName = "playerStatistics." + key + ".value_1_playerStatistics." + key + ".tsLastUpdate_1";
24840
+ characterPlayerCollection.dropIndex(indexName);
24841
+ xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + characterPlayerCollection.collectionName);
24842
+ }
24843
+ {
24844
+ let indexName = "catalogId_1_" + "playerStatistics." + key + ".value_1_playerStatistics." + key + ".tsLastUpdate_1";
24845
+ characterPlayerCollection.dropIndex(indexName);
24846
+ xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + characterPlayerCollection.collectionName);
24847
+ }
24657
24848
  }
24658
24849
  for (let i = 0; i < addKeyAscLst.length; i++) {
24659
24850
  let key = addKeyAscLst[i];
24660
- let indexDoc = {};
24661
- indexDoc["playerStatistics." + key + ".value"] = 1;
24662
- indexDoc["playerStatistics." + key + ".tsLastUpdate"] = 1;
24663
- let indexName = "playerStatistics." + key + ".value_1_playerStatistics." + key + ".tsLastUpdate_1";
24664
- characterPlayerCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
24665
- xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + characterPlayerCollection.collectionName);
24851
+ {
24852
+ let indexDoc = {};
24853
+ indexDoc["playerStatistics." + key + ".value"] = 1;
24854
+ indexDoc["playerStatistics." + key + ".tsLastUpdate"] = 1;
24855
+ let indexName = "playerStatistics." + key + ".value_1_playerStatistics." + key + ".tsLastUpdate_1";
24856
+ characterPlayerCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
24857
+ xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + characterPlayerCollection.collectionName);
24858
+ }
24859
+ {
24860
+ let indexDoc = {};
24861
+ indexDoc["catalogId"] = 1;
24862
+ indexDoc["playerStatistics." + key + ".value"] = 1;
24863
+ indexDoc["playerStatistics." + key + ".tsLastUpdate"] = 1;
24864
+ let indexName = "catalogId_1_" + "playerStatistics." + key + ".value_1_playerStatistics." + key + ".tsLastUpdate_1";
24865
+ characterPlayerCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
24866
+ xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + characterPlayerCollection.collectionName);
24867
+ }
24666
24868
  }
24667
24869
  }
24668
24870
  }
@@ -25069,17 +25271,34 @@ class SetGameInformationRequestHandler extends RequestHandler_1.RequestHandler {
25069
25271
  }
25070
25272
  for (let i = 0; i < removeKeyLst.length; i++) {
25071
25273
  let key = removeKeyLst[i];
25072
- let indexName = "groupCurrencies." + key + ".value_-1";
25073
- groupCollection.dropIndex(indexName);
25074
- xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + groupCollection.collectionName);
25274
+ {
25275
+ let indexName = "groupCurrencies." + key + ".value_-1";
25276
+ groupCollection.dropIndex(indexName);
25277
+ xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + groupCollection.collectionName);
25278
+ }
25279
+ {
25280
+ let indexName = "catalogId_1_" + "groupCurrencies." + key + ".value_-1";
25281
+ groupCollection.dropIndex(indexName);
25282
+ xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + groupCollection.collectionName);
25283
+ }
25075
25284
  }
25076
25285
  for (let i = 0; i < addKeyLst.length; i++) {
25077
25286
  let key = addKeyLst[i];
25078
- let indexDoc = {};
25079
- indexDoc["groupCurrencies." + key + ".value"] = -1;
25080
- let indexName = "groupCurrencies." + key + ".value_-1";
25081
- groupCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
25082
- xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + groupCollection.collectionName);
25287
+ {
25288
+ let indexDoc = {};
25289
+ indexDoc["groupCurrencies." + key + ".value"] = -1;
25290
+ let indexName = "groupCurrencies." + key + ".value_-1";
25291
+ groupCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
25292
+ xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + groupCollection.collectionName);
25293
+ }
25294
+ {
25295
+ let indexDoc = {};
25296
+ indexDoc["catalogId"] = 1;
25297
+ indexDoc["groupCurrencies." + key + ".value"] = -1;
25298
+ let indexName = "catalogId_1_" + "groupCurrencies." + key + ".value_-1";
25299
+ groupCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
25300
+ xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + groupCollection.collectionName);
25301
+ }
25083
25302
  }
25084
25303
  }
25085
25304
  if (request.gameSettings.groupSettings.groupStatisticsSettings != null) {
@@ -25129,18 +25348,36 @@ class SetGameInformationRequestHandler extends RequestHandler_1.RequestHandler {
25129
25348
  }
25130
25349
  for (let i = 0; i < removeKeyLst.length; i++) {
25131
25350
  let key = removeKeyLst[i];
25132
- let indexName = "groupStatistics." + key + ".value_-1_groupStatistics." + key + ".tsLastUpdate_1";
25133
- groupCollection.dropIndex(indexName);
25134
- xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + groupCollection.collectionName);
25351
+ {
25352
+ let indexName = "groupStatistics." + key + ".value_-1_groupStatistics." + key + ".tsLastUpdate_1";
25353
+ groupCollection.dropIndex(indexName);
25354
+ xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + groupCollection.collectionName);
25355
+ }
25356
+ {
25357
+ let indexName = "catalogId_1_" + "groupStatistics." + key + ".value_-1_groupStatistics." + key + ".tsLastUpdate_1";
25358
+ groupCollection.dropIndex(indexName);
25359
+ xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + groupCollection.collectionName);
25360
+ }
25135
25361
  }
25136
25362
  for (let i = 0; i < addKeyLst.length; i++) {
25137
25363
  let key = addKeyLst[i];
25138
- let indexDoc = {};
25139
- indexDoc["groupStatistics." + key + ".value"] = -1;
25140
- indexDoc["groupStatistics." + key + ".tsLastUpdate"] = 1;
25141
- let indexName = "groupStatistics." + key + ".value_-1_groupStatistics." + key + ".tsLastUpdate_1";
25142
- groupCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
25143
- xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + groupCollection.collectionName);
25364
+ {
25365
+ let indexDoc = {};
25366
+ indexDoc["groupStatistics." + key + ".value"] = -1;
25367
+ indexDoc["groupStatistics." + key + ".tsLastUpdate"] = 1;
25368
+ let indexName = "groupStatistics." + key + ".value_-1_groupStatistics." + key + ".tsLastUpdate_1";
25369
+ groupCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
25370
+ xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + groupCollection.collectionName);
25371
+ }
25372
+ {
25373
+ let indexDoc = {};
25374
+ indexDoc["catalogId"] = 1;
25375
+ indexDoc["groupStatistics." + key + ".value"] = -1;
25376
+ indexDoc["groupStatistics." + key + ".tsLastUpdate"] = 1;
25377
+ let indexName = "catalogId_1_" + "groupStatistics." + key + ".value_-1_groupStatistics." + key + ".tsLastUpdate_1";
25378
+ groupCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
25379
+ xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + groupCollection.collectionName);
25380
+ }
25144
25381
  }
25145
25382
  }
25146
25383
  {
@@ -25155,18 +25392,36 @@ class SetGameInformationRequestHandler extends RequestHandler_1.RequestHandler {
25155
25392
  }
25156
25393
  for (let i = 0; i < removeKeyAscLst.length; i++) {
25157
25394
  let key = removeKeyAscLst[i];
25158
- let indexName = "groupStatistics." + key + ".value_1_groupStatistics." + key + ".tsLastUpdate_1";
25159
- groupCollection.dropIndex(indexName);
25160
- xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + groupCollection.collectionName);
25395
+ {
25396
+ let indexName = "groupStatistics." + key + ".value_1_groupStatistics." + key + ".tsLastUpdate_1";
25397
+ groupCollection.dropIndex(indexName);
25398
+ xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + groupCollection.collectionName);
25399
+ }
25400
+ {
25401
+ let indexName = "catalogId_1_" + "groupStatistics." + key + ".value_1_groupStatistics." + key + ".tsLastUpdate_1";
25402
+ groupCollection.dropIndex(indexName);
25403
+ xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + groupCollection.collectionName);
25404
+ }
25161
25405
  }
25162
25406
  for (let i = 0; i < addKeyAscLst.length; i++) {
25163
25407
  let key = addKeyAscLst[i];
25164
- let indexDoc = {};
25165
- indexDoc["groupStatistics." + key + ".value"] = 1;
25166
- indexDoc["groupStatistics." + key + ".tsLastUpdate"] = 1;
25167
- let indexName = "groupStatistics." + key + ".value_1_groupStatistics." + key + ".tsLastUpdate_1";
25168
- groupCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
25169
- xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + groupCollection.collectionName);
25408
+ {
25409
+ let indexDoc = {};
25410
+ indexDoc["groupStatistics." + key + ".value"] = 1;
25411
+ indexDoc["groupStatistics." + key + ".tsLastUpdate"] = 1;
25412
+ let indexName = "groupStatistics." + key + ".value_1_groupStatistics." + key + ".tsLastUpdate_1";
25413
+ groupCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
25414
+ xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + groupCollection.collectionName);
25415
+ }
25416
+ {
25417
+ let indexDoc = {};
25418
+ indexDoc["catalogId"] = 1;
25419
+ indexDoc["groupStatistics." + key + ".value"] = 1;
25420
+ indexDoc["groupStatistics." + key + ".tsLastUpdate"] = 1;
25421
+ let indexName = "catalogId_1_" + "groupStatistics." + key + ".value_1_groupStatistics." + key + ".tsLastUpdate_1";
25422
+ groupCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
25423
+ xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + groupCollection.collectionName);
25424
+ }
25170
25425
  }
25171
25426
  }
25172
25427
  }
@@ -25306,18 +25561,36 @@ class SetGameInformationRequestHandler extends RequestHandler_1.RequestHandler {
25306
25561
  }
25307
25562
  for (let i = 0; i < removeKeyLst.length; i++) {
25308
25563
  let key = removeKeyLst[i];
25309
- let indexName = "itemStatistics." + key + ".value_-1_itemStatistics." + key + ".tsLastUpdate_1";
25310
- inventoryCollection.dropIndex(indexName);
25311
- xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + inventoryCollection.collectionName);
25564
+ {
25565
+ let indexName = "itemStatistics." + key + ".value_-1_itemStatistics." + key + ".tsLastUpdate_1";
25566
+ inventoryCollection.dropIndex(indexName);
25567
+ xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + inventoryCollection.collectionName);
25568
+ }
25569
+ {
25570
+ let indexName = "catalogId_1_" + "itemStatistics." + key + ".value_-1_itemStatistics." + key + ".tsLastUpdate_1";
25571
+ inventoryCollection.dropIndex(indexName);
25572
+ xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + inventoryCollection.collectionName);
25573
+ }
25312
25574
  }
25313
25575
  for (let i = 0; i < addKeyLst.length; i++) {
25314
25576
  let key = addKeyLst[i];
25315
- let indexDoc = {};
25316
- indexDoc["itemStatistics." + key + ".value"] = -1;
25317
- indexDoc["itemStatistics." + key + ".tsLastUpdate"] = 1;
25318
- let indexName = "itemStatistics." + key + ".value_-1_itemStatistics." + key + ".tsLastUpdate_1";
25319
- inventoryCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
25320
- xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + inventoryCollection.collectionName);
25577
+ {
25578
+ let indexDoc = {};
25579
+ indexDoc["itemStatistics." + key + ".value"] = -1;
25580
+ indexDoc["itemStatistics." + key + ".tsLastUpdate"] = 1;
25581
+ let indexName = "itemStatistics." + key + ".value_-1_itemStatistics." + key + ".tsLastUpdate_1";
25582
+ inventoryCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
25583
+ xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + inventoryCollection.collectionName);
25584
+ }
25585
+ {
25586
+ let indexDoc = {};
25587
+ indexDoc["catalogId"] = 1;
25588
+ indexDoc["itemStatistics." + key + ".value"] = -1;
25589
+ indexDoc["itemStatistics." + key + ".tsLastUpdate"] = 1;
25590
+ let indexName = "catalogId_1_" + "itemStatistics." + key + ".value_-1_itemStatistics." + key + ".tsLastUpdate_1";
25591
+ inventoryCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
25592
+ xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + inventoryCollection.collectionName);
25593
+ }
25321
25594
  }
25322
25595
  }
25323
25596
  {
@@ -25332,18 +25605,36 @@ class SetGameInformationRequestHandler extends RequestHandler_1.RequestHandler {
25332
25605
  }
25333
25606
  for (let i = 0; i < removeKeyAscLst.length; i++) {
25334
25607
  let key = removeKeyAscLst[i];
25335
- let indexName = "itemStatistics." + key + ".value_1_itemStatistics." + key + ".tsLastUpdate_1";
25336
- inventoryCollection.dropIndex(indexName);
25337
- xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + inventoryCollection.collectionName);
25608
+ {
25609
+ let indexName = "itemStatistics." + key + ".value_1_itemStatistics." + key + ".tsLastUpdate_1";
25610
+ inventoryCollection.dropIndex(indexName);
25611
+ xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + inventoryCollection.collectionName);
25612
+ }
25613
+ {
25614
+ let indexName = "catalogId_1_" + "itemStatistics." + key + ".value_1_itemStatistics." + key + ".tsLastUpdate_1";
25615
+ inventoryCollection.dropIndex(indexName);
25616
+ xDebug_1.Debug.log("[GN] [Database] drop index " + indexName + " at " + inventoryCollection.collectionName);
25617
+ }
25338
25618
  }
25339
25619
  for (let i = 0; i < addKeyAscLst.length; i++) {
25340
25620
  let key = addKeyAscLst[i];
25341
- let indexDoc = {};
25342
- indexDoc["itemStatistics." + key + ".value"] = 1;
25343
- indexDoc["itemStatistics." + key + ".tsLastUpdate"] = 1;
25344
- let indexName = "itemStatistics." + key + ".value_1_itemStatistics." + key + ".tsLastUpdate_1";
25345
- inventoryCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
25346
- xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + inventoryCollection.collectionName);
25621
+ {
25622
+ let indexDoc = {};
25623
+ indexDoc["itemStatistics." + key + ".value"] = 1;
25624
+ indexDoc["itemStatistics." + key + ".tsLastUpdate"] = 1;
25625
+ let indexName = "itemStatistics." + key + ".value_1_itemStatistics." + key + ".tsLastUpdate_1";
25626
+ inventoryCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
25627
+ xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + inventoryCollection.collectionName);
25628
+ }
25629
+ {
25630
+ let indexDoc = {};
25631
+ indexDoc["catalogId"] = 1;
25632
+ indexDoc["itemStatistics." + key + ".value"] = 1;
25633
+ indexDoc["itemStatistics." + key + ".tsLastUpdate"] = 1;
25634
+ let indexName = "catalogId_1_" + "itemStatistics." + key + ".value_1_itemStatistics." + key + ".tsLastUpdate_1";
25635
+ inventoryCollection.createIndex(indexDoc, { background: true, sparse: true, name: indexName });
25636
+ xDebug_1.Debug.log("[GN] [Database] create new index " + indexName + " at " + inventoryCollection.collectionName);
25637
+ }
25347
25638
  }
25348
25639
  }
25349
25640
  }
@@ -31128,9 +31419,8 @@ class GetCurrencyLeaderboardRequestHandler extends GamePlayerBaseRequestHandler_
31128
31419
  }
31129
31420
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
31130
31421
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
31131
- let gamePlayerFindOptions = this.convertToGamePlayerFindOptions(request.infoRequestParam);
31132
- let masterPlayerSettings = this.gnServer.getGNSettings().getGamePlayerSettings(secretInfo.getGameId());
31133
- let playerCurrencySettingsItem = masterPlayerSettings.playerCurrencySettings.find(x => x.key == request.key);
31422
+ let gamePlayerSettings = this.gnServer.getGNSettings().getGamePlayerSettings(secretInfo.getGameId());
31423
+ let playerCurrencySettingsItem = gamePlayerSettings.playerCurrencySettings.find(x => x.key == request.key);
31134
31424
  if (playerCurrencySettingsItem == null) {
31135
31425
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.KeyNotFound);
31136
31426
  return operationResponse;
@@ -31162,6 +31452,7 @@ class GetCurrencyLeaderboardRequestHandler extends GamePlayerBaseRequestHandler_
31162
31452
  }
31163
31453
  }
31164
31454
  else {
31455
+ let gamePlayerFindOptions = this.convertToGamePlayerFindOptions(request.infoRequestParam);
31165
31456
  if (request.skip + request.limit <= 100) {
31166
31457
  gamePlayerFindOptions = null;
31167
31458
  gamePlayers = yield this.gnServer.getDatabase().loadGamePlayersLeaderboardWithCurrenciesAsync(request.key, 0, 100, secretInfo.getGameId(), gamePlayerFindOptions);
@@ -31341,11 +31632,11 @@ class GetCurrencyLogRequestHandler extends RequestHandler_1.RequestHandler {
31341
31632
  }
31342
31633
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
31343
31634
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
31344
- let masterPlayerSettings = this.gnServer.getGNSettings().getGamePlayerSettings(secretInfo.getGameId());
31635
+ let gamePlayerSettings = this.gnServer.getGNSettings().getGamePlayerSettings(secretInfo.getGameId());
31345
31636
  let keys = [];
31346
31637
  if (request.keys) {
31347
31638
  for (let i = 0; i < request.keys.length; i++) {
31348
- let playerCurrencySettingsItem = masterPlayerSettings.playerCurrencySettings.find(x => x.key == request.keys[i]);
31639
+ let playerCurrencySettingsItem = gamePlayerSettings.playerCurrencySettings.find(x => x.key == request.keys[i]);
31349
31640
  if (playerCurrencySettingsItem != null) {
31350
31641
  keys.push(playerCurrencySettingsItem.key);
31351
31642
  }
@@ -31750,6 +32041,7 @@ const InfoRequestParam_1 = __webpack_require__(68350);
31750
32041
  const GetFriendStatisticsLeaderboardRequestHandler_1 = __webpack_require__(28199);
31751
32042
  const FriendStatus_1 = __webpack_require__(11259);
31752
32043
  const xStatisticsAggregationMethod_1 = __webpack_require__(21554);
32044
+ const xDatetime_1 = __webpack_require__(21817);
31753
32045
  class GetFriendStatisticsLeaderboardAroundPlayerOperationRequest extends OperationRequest_1.OperationRequest {
31754
32046
  isValidRequest() {
31755
32047
  if (!super.isValidRequest())
@@ -31777,6 +32069,10 @@ __decorate([
31777
32069
  (0, DataMember_1.NumberDataMember)({ code: GNParameterCode_1.GNParameterCode.Limit, defaultValue: 10, minValue: 1, maxValue: 100, mustInt: true, isOptional: true }),
31778
32070
  __metadata("design:type", Number)
31779
32071
  ], GetFriendStatisticsLeaderboardAroundPlayerOperationRequest.prototype, "limit", void 0);
32072
+ __decorate([
32073
+ (0, DataMember_1.BooleanDataMember)({ code: GNParameterCode_1.GNParameterCode.LoadFromCache, defaultValue: true, isOptional: true }),
32074
+ __metadata("design:type", Boolean)
32075
+ ], GetFriendStatisticsLeaderboardAroundPlayerOperationRequest.prototype, "loadFromCache", void 0);
31780
32076
  class ServerGetFriendStatisticsLeaderboardAroundPlayerOperationRequest extends GetFriendStatisticsLeaderboardAroundPlayerOperationRequest {
31781
32077
  isValidRequest() {
31782
32078
  if (!super.isValidRequest())
@@ -31830,7 +32126,8 @@ class GetFriendStatisticsLeaderboardAroundPlayerRequestHandler extends GamePlaye
31830
32126
  key: request.key,
31831
32127
  skip: request.skip,
31832
32128
  limit: request.limit,
31833
- infoRequestParam: request.infoRequestParam
32129
+ infoRequestParam: request.infoRequestParam,
32130
+ loadFromCache: request.loadFromCache,
31834
32131
  }, secretInfo, operationRequest);
31835
32132
  });
31836
32133
  }
@@ -31849,7 +32146,8 @@ class GetFriendStatisticsLeaderboardAroundPlayerRequestHandler extends GamePlaye
31849
32146
  key: request.key,
31850
32147
  skip: request.skip,
31851
32148
  limit: request.limit,
31852
- infoRequestParam: request.infoRequestParam
32149
+ infoRequestParam: request.infoRequestParam,
32150
+ loadFromCache: request.loadFromCache,
31853
32151
  }, secretInfo, operationRequest);
31854
32152
  });
31855
32153
  }
@@ -31868,7 +32166,8 @@ class GetFriendStatisticsLeaderboardAroundPlayerRequestHandler extends GamePlaye
31868
32166
  key: request.key,
31869
32167
  skip: request.skip,
31870
32168
  limit: request.limit,
31871
- infoRequestParam: request.infoRequestParam
32169
+ infoRequestParam: request.infoRequestParam,
32170
+ loadFromCache: request.loadFromCache,
31872
32171
  }, secretInfo, operationRequest);
31873
32172
  });
31874
32173
  }
@@ -31880,33 +32179,46 @@ class GetFriendStatisticsLeaderboardAroundPlayerRequestHandler extends GamePlaye
31880
32179
  }
31881
32180
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
31882
32181
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
31883
- let gamePlayerFindOptions = this.convertToGamePlayerFindOptions(request.infoRequestParam);
31884
- let masterPlayerSettings = this.gnServer.getGNSettings().getGamePlayerSettings(secretInfo.getGameId());
31885
- let playerStatisticsSettingsItem = masterPlayerSettings.playerStatisticsSettings.find(x => x.key == request.key);
32182
+ let gamePlayerSettings = this.gnServer.getGNSettings().getGamePlayerSettings(secretInfo.getGameId());
32183
+ let playerStatisticsSettingsItem = gamePlayerSettings.playerStatisticsSettings.find(x => x.key == request.key);
31886
32184
  if (playerStatisticsSettingsItem == null) {
31887
32185
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.KeyNotFound);
31888
32186
  return operationResponse;
31889
32187
  }
31890
- let gamePlayer = yield this.gnServer.getDatabase().loadGamePlayerAsync(request.userId, secretInfo.getGameId(), { playerFriends: true, playerStatistics: true });
31891
- if (gamePlayer == null) {
31892
- operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.GamePlayerNotFound);
31893
- return operationResponse;
32188
+ let cacheKey = "gamePlayerStatisticsLeaderboardFriendAround_" + request.userId;
32189
+ if (request.loadFromCache) {
32190
+ if (!this.gnServer.getCacheData().isValid(cacheKey)) {
32191
+ request.loadFromCache = false;
32192
+ }
31894
32193
  }
31895
32194
  let gnResults = new GNData_1.GNArray();
31896
- let friendIds = [];
31897
- let allPlayerFriends = gamePlayer.getAllPlayerFriends();
31898
- for (let i = 0; i < allPlayerFriends.length; i++) {
31899
- let playerFriendItem = allPlayerFriends[i];
31900
- if (playerFriendItem.status == FriendStatus_1.FriendStatus.Friend) {
31901
- friendIds.push(playerFriendItem.friendId);
31902
- }
31903
- }
31904
- let allGamePlayers = yield this.gnServer.getDatabase().loadFriendGamePlayersLeaderboardWithStatisticsAsync(friendIds, secretInfo.getGameId(), gamePlayerFindOptions);
31905
- allGamePlayers.push(gamePlayer);
31906
- let statisticsAggregationMethod = playerStatisticsSettingsItem.statisticsAggregationMethod;
31907
- let gamePlayers = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum
31908
- ? GetFriendStatisticsLeaderboardRequestHandler_1.GetFriendStatisticsLeaderboardRequestHandler.quickSortAsc(request.key, allGamePlayers, playerStatisticsSettingsItem.initialValue)
31909
- : GetFriendStatisticsLeaderboardRequestHandler_1.GetFriendStatisticsLeaderboardRequestHandler.quickSort(request.key, allGamePlayers, playerStatisticsSettingsItem.initialValue);
32195
+ let gamePlayers;
32196
+ if (request.loadFromCache) {
32197
+ gamePlayers = this.gnServer.getCacheData().getData(cacheKey);
32198
+ }
32199
+ else {
32200
+ let gamePlayer = yield this.gnServer.getDatabase().loadGamePlayerAsync(request.userId, secretInfo.getGameId(), null);
32201
+ if (gamePlayer == null) {
32202
+ operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.GamePlayerNotFound);
32203
+ return operationResponse;
32204
+ }
32205
+ let friendIds = [];
32206
+ let allPlayerFriends = gamePlayer.getAllPlayerFriends();
32207
+ for (let i = 0; i < allPlayerFriends.length; i++) {
32208
+ let playerFriendItem = allPlayerFriends[i];
32209
+ if (playerFriendItem.status == FriendStatus_1.FriendStatus.Friend) {
32210
+ friendIds.push(playerFriendItem.friendId);
32211
+ }
32212
+ }
32213
+ let allGamePlayers = yield this.gnServer.getDatabase().loadFriendGamePlayersLeaderboardWithStatisticsAsync(friendIds, secretInfo.getGameId(), null);
32214
+ allGamePlayers.push(gamePlayer);
32215
+ let statisticsAggregationMethod = playerStatisticsSettingsItem.statisticsAggregationMethod;
32216
+ gamePlayers = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum
32217
+ ? GetFriendStatisticsLeaderboardRequestHandler_1.GetFriendStatisticsLeaderboardRequestHandler.quickSortAsc(request.key, allGamePlayers, playerStatisticsSettingsItem.initialValue)
32218
+ : GetFriendStatisticsLeaderboardRequestHandler_1.GetFriendStatisticsLeaderboardRequestHandler.quickSort(request.key, allGamePlayers, playerStatisticsSettingsItem.initialValue);
32219
+ this.gnServer.getCacheData().setData(cacheKey, gamePlayers, xDatetime_1.xDatetime.ONE_MINUTE_MILLISECOND * 5);
32220
+ }
32221
+ let gamePlayer = gamePlayers.find(x => x.getUserId() == request.userId);
31910
32222
  let thisPosition = gamePlayers.indexOf(gamePlayer);
31911
32223
  for (let i = request.skip + thisPosition; i < request.skip + thisPosition + request.limit; i++) {
31912
32224
  if (i >= gamePlayers.length)
@@ -31995,6 +32307,10 @@ __decorate([
31995
32307
  (0, DataMember_1.NumberDataMember)({ code: GNParameterCode_1.GNParameterCode.Limit, defaultValue: 10, minValue: 1, maxValue: 100, mustInt: true, isOptional: true }),
31996
32308
  __metadata("design:type", Number)
31997
32309
  ], GetFriendStatisticsLeaderboardOperationRequest.prototype, "limit", void 0);
32310
+ __decorate([
32311
+ (0, DataMember_1.BooleanDataMember)({ code: GNParameterCode_1.GNParameterCode.LoadFromCache, defaultValue: true, isOptional: true }),
32312
+ __metadata("design:type", Boolean)
32313
+ ], GetFriendStatisticsLeaderboardOperationRequest.prototype, "loadFromCache", void 0);
31998
32314
  class ServerGetFriendStatisticsLeaderboardOperationRequest extends GetFriendStatisticsLeaderboardOperationRequest {
31999
32315
  isValidRequest() {
32000
32316
  if (!super.isValidRequest())
@@ -32048,7 +32364,8 @@ class GetFriendStatisticsLeaderboardRequestHandler extends GamePlayerBaseRequest
32048
32364
  key: request.key,
32049
32365
  skip: request.skip,
32050
32366
  limit: request.limit,
32051
- infoRequestParam: request.infoRequestParam
32367
+ infoRequestParam: request.infoRequestParam,
32368
+ loadFromCache: request.loadFromCache,
32052
32369
  }, secretInfo, operationRequest);
32053
32370
  });
32054
32371
  }
@@ -32067,7 +32384,8 @@ class GetFriendStatisticsLeaderboardRequestHandler extends GamePlayerBaseRequest
32067
32384
  key: request.key,
32068
32385
  skip: request.skip,
32069
32386
  limit: request.limit,
32070
- infoRequestParam: request.infoRequestParam
32387
+ infoRequestParam: request.infoRequestParam,
32388
+ loadFromCache: request.loadFromCache,
32071
32389
  }, secretInfo, operationRequest);
32072
32390
  });
32073
32391
  }
@@ -32086,7 +32404,8 @@ class GetFriendStatisticsLeaderboardRequestHandler extends GamePlayerBaseRequest
32086
32404
  key: request.key,
32087
32405
  skip: request.skip,
32088
32406
  limit: request.limit,
32089
- infoRequestParam: request.infoRequestParam
32407
+ infoRequestParam: request.infoRequestParam,
32408
+ loadFromCache: request.loadFromCache,
32090
32409
  }, secretInfo, operationRequest);
32091
32410
  });
32092
32411
  }
@@ -32098,35 +32417,45 @@ class GetFriendStatisticsLeaderboardRequestHandler extends GamePlayerBaseRequest
32098
32417
  }
32099
32418
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
32100
32419
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
32101
- let gamePlayerFindOptions = this.convertToGamePlayerFindOptions(request.infoRequestParam);
32102
- if (gamePlayerFindOptions != null)
32103
- gamePlayerFindOptions.playerStatistics = true;
32104
- let masterPlayerSettings = this.gnServer.getGNSettings().getGamePlayerSettings(secretInfo.getGameId());
32105
- let playerStatisticsSettingsItem = masterPlayerSettings.playerStatisticsSettings.find(x => x.key == request.key);
32420
+ let gamePlayerSettings = this.gnServer.getGNSettings().getGamePlayerSettings(secretInfo.getGameId());
32421
+ let playerStatisticsSettingsItem = gamePlayerSettings.playerStatisticsSettings.find(x => x.key == request.key);
32106
32422
  if (playerStatisticsSettingsItem == null) {
32107
32423
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.KeyNotFound);
32108
32424
  return operationResponse;
32109
32425
  }
32110
- let gamePlayer = yield this.gnServer.getDatabase().loadGamePlayerAsync(request.userId, secretInfo.getGameId(), { playerFriends: true, playerStatistics: true });
32111
- if (gamePlayer == null) {
32112
- operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.GamePlayerNotFound);
32113
- return operationResponse;
32426
+ let cacheKey = "gamePlayerStatisticsLeaderboardFriend_" + request.userId;
32427
+ if (request.loadFromCache) {
32428
+ if (!this.gnServer.getCacheData().isValid(cacheKey)) {
32429
+ request.loadFromCache = false;
32430
+ }
32114
32431
  }
32115
32432
  let gnResults = new GNData_1.GNArray();
32116
- let friendIds = [];
32117
- let allPlayerFriends = gamePlayer.getAllPlayerFriends();
32118
- for (let i = 0; i < allPlayerFriends.length; i++) {
32119
- let playerFriendItem = allPlayerFriends[i];
32120
- if (playerFriendItem.status == FriendStatus_1.FriendStatus.Friend) {
32121
- friendIds.push(playerFriendItem.friendId);
32122
- }
32123
- }
32124
- let allGamePlayers = yield this.gnServer.getDatabase().loadFriendGamePlayersLeaderboardWithStatisticsAsync(friendIds, secretInfo.getGameId(), gamePlayerFindOptions);
32125
- allGamePlayers.push(gamePlayer);
32126
- let statisticsAggregationMethod = playerStatisticsSettingsItem.statisticsAggregationMethod;
32127
- let gamePlayers = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum
32128
- ? GetFriendStatisticsLeaderboardRequestHandler.quickSortAsc(request.key, allGamePlayers, playerStatisticsSettingsItem.initialValue)
32129
- : GetFriendStatisticsLeaderboardRequestHandler.quickSort(request.key, allGamePlayers, playerStatisticsSettingsItem.initialValue);
32433
+ let gamePlayers;
32434
+ if (request.loadFromCache) {
32435
+ gamePlayers = this.gnServer.getCacheData().getData(cacheKey);
32436
+ }
32437
+ else {
32438
+ let gamePlayer = yield this.gnServer.getDatabase().loadGamePlayerAsync(request.userId, secretInfo.getGameId(), null);
32439
+ if (gamePlayer == null) {
32440
+ operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.GamePlayerNotFound);
32441
+ return operationResponse;
32442
+ }
32443
+ let friendIds = [];
32444
+ let allPlayerFriends = gamePlayer.getAllPlayerFriends();
32445
+ for (let i = 0; i < allPlayerFriends.length; i++) {
32446
+ let playerFriendItem = allPlayerFriends[i];
32447
+ if (playerFriendItem.status == FriendStatus_1.FriendStatus.Friend) {
32448
+ friendIds.push(playerFriendItem.friendId);
32449
+ }
32450
+ }
32451
+ let allGamePlayers = yield this.gnServer.getDatabase().loadFriendGamePlayersLeaderboardWithStatisticsAsync(friendIds, secretInfo.getGameId(), null);
32452
+ allGamePlayers.push(gamePlayer);
32453
+ let statisticsAggregationMethod = playerStatisticsSettingsItem.statisticsAggregationMethod;
32454
+ gamePlayers = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum
32455
+ ? GetFriendStatisticsLeaderboardRequestHandler.quickSortAsc(request.key, allGamePlayers, playerStatisticsSettingsItem.initialValue)
32456
+ : GetFriendStatisticsLeaderboardRequestHandler.quickSort(request.key, allGamePlayers, playerStatisticsSettingsItem.initialValue);
32457
+ this.gnServer.getCacheData().setData(cacheKey, gamePlayers, xDatetime_1.xDatetime.ONE_MINUTE_MILLISECOND * 5);
32458
+ }
32130
32459
  for (let i = request.skip; i < request.skip + request.limit; i++) {
32131
32460
  if (i >= gamePlayers.length)
32132
32461
  break;
@@ -34971,6 +35300,7 @@ const GNErrorCode_1 = __webpack_require__(94559);
34971
35300
  const GamePlayerBaseRequestHandler_1 = __webpack_require__(67811);
34972
35301
  const InfoRequestParam_1 = __webpack_require__(68350);
34973
35302
  const xStatisticsAggregationMethod_1 = __webpack_require__(21554);
35303
+ const xDatetime_1 = __webpack_require__(21817);
34974
35304
  class GetStatisticsLeaderboardAroundPlayerOperationRequest extends OperationRequest_1.OperationRequest {
34975
35305
  isValidRequest() {
34976
35306
  if (!super.isValidRequest())
@@ -34998,6 +35328,10 @@ __decorate([
34998
35328
  (0, DataMember_1.NumberDataMember)({ code: GNParameterCode_1.GNParameterCode.Limit, defaultValue: 10, minValue: 1, maxValue: 100, mustInt: true, isOptional: true }),
34999
35329
  __metadata("design:type", Number)
35000
35330
  ], GetStatisticsLeaderboardAroundPlayerOperationRequest.prototype, "limit", void 0);
35331
+ __decorate([
35332
+ (0, DataMember_1.BooleanDataMember)({ code: GNParameterCode_1.GNParameterCode.LoadFromCache, defaultValue: true, isOptional: true }),
35333
+ __metadata("design:type", Boolean)
35334
+ ], GetStatisticsLeaderboardAroundPlayerOperationRequest.prototype, "loadFromCache", void 0);
35001
35335
  class ServerGetStatisticsLeaderboardAroundPlayerOperationRequest extends GetStatisticsLeaderboardAroundPlayerOperationRequest {
35002
35336
  isValidRequest() {
35003
35337
  if (!super.isValidRequest())
@@ -35051,7 +35385,8 @@ class GetStatisticsLeaderboardAroundPlayerRequestHandler extends GamePlayerBaseR
35051
35385
  key: request.key,
35052
35386
  skip: request.skip,
35053
35387
  limit: request.limit,
35054
- infoRequestParam: request.infoRequestParam
35388
+ infoRequestParam: request.infoRequestParam,
35389
+ loadFromCache: request.loadFromCache,
35055
35390
  }, secretInfo, operationRequest);
35056
35391
  });
35057
35392
  }
@@ -35070,7 +35405,8 @@ class GetStatisticsLeaderboardAroundPlayerRequestHandler extends GamePlayerBaseR
35070
35405
  key: request.key,
35071
35406
  skip: request.skip,
35072
35407
  limit: request.limit,
35073
- infoRequestParam: request.infoRequestParam
35408
+ infoRequestParam: request.infoRequestParam,
35409
+ loadFromCache: request.loadFromCache,
35074
35410
  }, secretInfo, operationRequest);
35075
35411
  });
35076
35412
  }
@@ -35089,7 +35425,8 @@ class GetStatisticsLeaderboardAroundPlayerRequestHandler extends GamePlayerBaseR
35089
35425
  key: request.key,
35090
35426
  skip: request.skip,
35091
35427
  limit: request.limit,
35092
- infoRequestParam: request.infoRequestParam
35428
+ infoRequestParam: request.infoRequestParam,
35429
+ loadFromCache: request.loadFromCache,
35093
35430
  }, secretInfo, operationRequest);
35094
35431
  });
35095
35432
  }
@@ -35101,25 +35438,75 @@ class GetStatisticsLeaderboardAroundPlayerRequestHandler extends GamePlayerBaseR
35101
35438
  }
35102
35439
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
35103
35440
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
35104
- let gamePlayerFindOptions = this.convertToGamePlayerFindOptions(request.infoRequestParam);
35105
- let masterPlayerSettings = this.gnServer.getGNSettings().getGamePlayerSettings(secretInfo.getGameId());
35106
- let playerStatisticsSettingsItem = masterPlayerSettings.playerStatisticsSettings.find(x => x.key == request.key);
35441
+ let gamePlayerSettings = this.gnServer.getGNSettings().getGamePlayerSettings(secretInfo.getGameId());
35442
+ let playerStatisticsSettingsItem = gamePlayerSettings.playerStatisticsSettings.find(x => x.key == request.key);
35107
35443
  if (playerStatisticsSettingsItem == null) {
35108
35444
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.KeyNotFound);
35109
35445
  return operationResponse;
35110
35446
  }
35111
- let statisticsAggregationMethod = playerStatisticsSettingsItem.statisticsAggregationMethod;
35112
- let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
35447
+ let positionCacheKey = "gamePlayerStatisticsLeaderboardAroundPosition_" + request.userId + "_" + request.key;
35448
+ let cacheKey = "gamePlayerStatisticsLeaderboardAround_" + request.userId + "_" + request.key;
35449
+ if (request.loadFromCache) {
35450
+ if (request.skip + request.limit > 100) {
35451
+ request.loadFromCache = false;
35452
+ }
35453
+ }
35454
+ if (request.loadFromCache) {
35455
+ if (!this.gnServer.getCacheData().isValid(cacheKey) || !this.gnServer.getCacheData().isValid(positionCacheKey)) {
35456
+ request.loadFromCache = false;
35457
+ }
35458
+ }
35113
35459
  let gnResults = new GNData_1.GNArray();
35114
- let thisPosition = yield this.gnServer.getDatabase().loadPositionGamePlayerLeaderboardWithStatisticsAsync(request.key, request.userId, secretInfo.getGameId(), playerStatisticsSettingsItem.initialValue, direction);
35115
- let gamePlayers = yield this.gnServer.getDatabase().loadGamePlayersLeaderboardWithStatisticsAsync(request.key, thisPosition + request.skip, request.limit, secretInfo.getGameId(), direction, gamePlayerFindOptions);
35116
- for (let i = 0; i < gamePlayers.length; i++) {
35117
- let gamePlayer = gamePlayers[i];
35118
- let gnResult = new GNData_1.GNHashtable();
35119
- gnResult.add(GNParameterCode_1.GNParameterCode.Position, i + request.skip + thisPosition);
35120
- gnResult.add(GNParameterCode_1.GNParameterCode.UserId, gamePlayer.getUserId());
35121
- gnResult.add(GNParameterCode_1.GNParameterCode.InfoResponseParameters, this.generateInfoResponseParameters(gamePlayer, request.infoRequestParam, secretInfo.getGameId()));
35122
- gnResults.add(gnResult);
35460
+ let thisPosition;
35461
+ let gamePlayers;
35462
+ if (request.loadFromCache) {
35463
+ thisPosition = this.gnServer.getCacheData().getData(positionCacheKey);
35464
+ gamePlayers = this.gnServer.getCacheData().getData(cacheKey);
35465
+ for (let i = request.skip; i < request.skip + request.limit; i++) {
35466
+ if (i >= gamePlayers.length)
35467
+ break;
35468
+ let gamePlayer = gamePlayers[i];
35469
+ let gnResult = new GNData_1.GNHashtable();
35470
+ gnResult.add(GNParameterCode_1.GNParameterCode.Position, i + thisPosition);
35471
+ gnResult.add(GNParameterCode_1.GNParameterCode.UserId, gamePlayer.getUserId());
35472
+ gnResult.add(GNParameterCode_1.GNParameterCode.InfoResponseParameters, this.generateInfoResponseParameters(gamePlayer, request.infoRequestParam, secretInfo.getGameId()));
35473
+ gnResults.add(gnResult);
35474
+ }
35475
+ }
35476
+ else {
35477
+ let statisticsAggregationMethod = playerStatisticsSettingsItem.statisticsAggregationMethod;
35478
+ let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
35479
+ thisPosition = yield this.gnServer.getDatabase().loadPositionGamePlayerLeaderboardWithStatisticsAsync(request.key, request.userId, secretInfo.getGameId(), playerStatisticsSettingsItem.initialValue, direction);
35480
+ if (thisPosition != -1) {
35481
+ this.gnServer.getCacheData().setData(positionCacheKey, thisPosition, xDatetime_1.xDatetime.ONE_MINUTE_MILLISECOND * 5);
35482
+ let gamePlayerFindOptions = this.convertToGamePlayerFindOptions(request.infoRequestParam);
35483
+ if (request.skip + request.limit <= 100) {
35484
+ gamePlayerFindOptions = null;
35485
+ gamePlayers = yield this.gnServer.getDatabase().loadGamePlayersLeaderboardWithStatisticsAsync(request.key, thisPosition, 100, secretInfo.getGameId(), direction, gamePlayerFindOptions);
35486
+ for (let i = request.skip; i < request.skip + request.limit; i++) {
35487
+ if (i >= gamePlayers.length)
35488
+ break;
35489
+ let gamePlayer = gamePlayers[i];
35490
+ let gnResult = new GNData_1.GNHashtable();
35491
+ gnResult.add(GNParameterCode_1.GNParameterCode.Position, i + thisPosition);
35492
+ gnResult.add(GNParameterCode_1.GNParameterCode.UserId, gamePlayer.getUserId());
35493
+ gnResult.add(GNParameterCode_1.GNParameterCode.InfoResponseParameters, this.generateInfoResponseParameters(gamePlayer, request.infoRequestParam, secretInfo.getGameId()));
35494
+ gnResults.add(gnResult);
35495
+ }
35496
+ this.gnServer.getCacheData().setData(cacheKey, gamePlayers, xDatetime_1.xDatetime.ONE_MINUTE_MILLISECOND * 5);
35497
+ }
35498
+ else {
35499
+ gamePlayers = yield this.gnServer.getDatabase().loadGamePlayersLeaderboardWithStatisticsAsync(request.key, thisPosition + request.skip, request.limit, secretInfo.getGameId(), direction, gamePlayerFindOptions);
35500
+ for (let i = 0; i < gamePlayers.length; i++) {
35501
+ let gamePlayer = gamePlayers[i];
35502
+ let gnResult = new GNData_1.GNHashtable();
35503
+ gnResult.add(GNParameterCode_1.GNParameterCode.Position, i + thisPosition + request.skip);
35504
+ gnResult.add(GNParameterCode_1.GNParameterCode.UserId, gamePlayer.getUserId());
35505
+ gnResult.add(GNParameterCode_1.GNParameterCode.InfoResponseParameters, this.generateInfoResponseParameters(gamePlayer, request.infoRequestParam, secretInfo.getGameId()));
35506
+ gnResults.add(gnResult);
35507
+ }
35508
+ }
35509
+ }
35123
35510
  }
35124
35511
  operationResponse.setParameter(GNParameterCode_1.GNParameterCode.Results, gnResults);
35125
35512
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.Ok);
@@ -35290,9 +35677,8 @@ class GetStatisticsLeaderboardRequestHandler extends GamePlayerBaseRequestHandle
35290
35677
  }
35291
35678
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
35292
35679
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
35293
- let gamePlayerFindOptions = this.convertToGamePlayerFindOptions(request.infoRequestParam);
35294
- let masterPlayerSettings = this.gnServer.getGNSettings().getGamePlayerSettings(secretInfo.getGameId());
35295
- let playerStatisticsSettingsItem = masterPlayerSettings.playerStatisticsSettings.find(x => x.key == request.key);
35680
+ let gamePlayerSettings = this.gnServer.getGNSettings().getGamePlayerSettings(secretInfo.getGameId());
35681
+ let playerStatisticsSettingsItem = gamePlayerSettings.playerStatisticsSettings.find(x => x.key == request.key);
35296
35682
  if (playerStatisticsSettingsItem == null) {
35297
35683
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.KeyNotFound);
35298
35684
  return operationResponse;
@@ -35309,8 +35695,6 @@ class GetStatisticsLeaderboardRequestHandler extends GamePlayerBaseRequestHandle
35309
35695
  request.loadFromCache = false;
35310
35696
  }
35311
35697
  }
35312
- let statisticsAggregationMethod = playerStatisticsSettingsItem.statisticsAggregationMethod;
35313
- let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
35314
35698
  let gnResults = new GNData_1.GNArray();
35315
35699
  let gamePlayers;
35316
35700
  if (request.loadFromCache) {
@@ -35327,6 +35711,9 @@ class GetStatisticsLeaderboardRequestHandler extends GamePlayerBaseRequestHandle
35327
35711
  }
35328
35712
  }
35329
35713
  else {
35714
+ let gamePlayerFindOptions = this.convertToGamePlayerFindOptions(request.infoRequestParam);
35715
+ let statisticsAggregationMethod = playerStatisticsSettingsItem.statisticsAggregationMethod;
35716
+ let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
35330
35717
  if (request.skip + request.limit <= 100) {
35331
35718
  gamePlayerFindOptions = null;
35332
35719
  gamePlayers = yield this.gnServer.getDatabase().loadGamePlayersLeaderboardWithStatisticsAsync(request.key, 0, 100, secretInfo.getGameId(), direction, gamePlayerFindOptions);
@@ -35543,11 +35930,11 @@ class GetStatisticsLogRequestHandler extends RequestHandler_1.RequestHandler {
35543
35930
  }
35544
35931
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
35545
35932
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
35546
- let masterPlayerSettings = this.gnServer.getGNSettings().getGamePlayerSettings(secretInfo.getGameId());
35933
+ let gamePlayerSettings = this.gnServer.getGNSettings().getGamePlayerSettings(secretInfo.getGameId());
35547
35934
  let keys = [];
35548
35935
  if (request.keys) {
35549
35936
  for (let i = 0; i < request.keys.length; i++) {
35550
- let playerStatisticsSettingsItem = masterPlayerSettings.playerStatisticsSettings.find(x => x.key == request.keys[i]);
35937
+ let playerStatisticsSettingsItem = gamePlayerSettings.playerStatisticsSettings.find(x => x.key == request.keys[i]);
35551
35938
  if (playerStatisticsSettingsItem != null) {
35552
35939
  keys.push(playerStatisticsSettingsItem.key);
35553
35940
  }
@@ -36586,7 +36973,7 @@ __decorate([
36586
36973
  __metadata("design:type", String)
36587
36974
  ], GrantPlayerItemOperationRequest.prototype, "displayName", void 0);
36588
36975
  __decorate([
36589
- (0, DataMember_1.NumberDataMember)({ code: GNParameterCode_1.GNParameterCode.Amount, defaultValue: 1, isOptional: true }),
36976
+ (0, DataMember_1.NumberDataMember)({ code: GNParameterCode_1.GNParameterCode.Amount, defaultValue: 1, mustInt: true, isOptional: true }),
36590
36977
  __metadata("design:type", Number)
36591
36978
  ], GrantPlayerItemOperationRequest.prototype, "amount", void 0);
36592
36979
  class ServerGrantPlayerItemOperationRequest extends GrantPlayerItemOperationRequest {
@@ -36709,7 +37096,7 @@ class GrantPlayerItemRequestHandler extends GamePlayerBaseRequestHandler_1.GameP
36709
37096
  return operationResponse;
36710
37097
  }
36711
37098
  let amount = request.amount;
36712
- if (playerItemCatalogSettingsItem.itemType == ItemType_1.ItemType.NonConsumable) {
37099
+ if (playerItemCatalogSettingsItem.itemType == ItemType_1.ItemType.NonStackable) {
36713
37100
  amount = 1;
36714
37101
  }
36715
37102
  let itemId = StringUtility_1.StringUtility.generateRandomString(12, this.gnServer.getIdTypeCase());
@@ -41252,11 +41639,11 @@ class GetCurrencyLogRequestHandler extends RequestHandler_1.RequestHandler {
41252
41639
  }
41253
41640
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
41254
41641
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
41255
- let masterPlayerSettings = this.gnServer.getGNSettings().getGroupSettings(secretInfo.getGameId());
41642
+ let groupSettings = this.gnServer.getGNSettings().getGroupSettings(secretInfo.getGameId());
41256
41643
  let keys = [];
41257
41644
  if (request.keys) {
41258
41645
  for (let i = 0; i < request.keys.length; i++) {
41259
- let playerCurrencySettingsItem = masterPlayerSettings.groupCurrencySettings.find(x => x.key == request.keys[i]);
41646
+ let playerCurrencySettingsItem = groupSettings.groupCurrencySettings.find(x => x.key == request.keys[i]);
41260
41647
  if (playerCurrencySettingsItem != null) {
41261
41648
  keys.push(playerCurrencySettingsItem.key);
41262
41649
  }
@@ -43503,6 +43890,7 @@ const GNErrorCode_1 = __webpack_require__(94559);
43503
43890
  const GroupBaseRequestHandler_1 = __webpack_require__(93655);
43504
43891
  const InfoRequestParam_1 = __webpack_require__(23228);
43505
43892
  const xStatisticsAggregationMethod_1 = __webpack_require__(21554);
43893
+ const xDatetime_1 = __webpack_require__(21817);
43506
43894
  class GetStatisticsLeaderboardAroundGroupOperationRequest extends OperationRequest_1.OperationRequest {
43507
43895
  isValidRequest() {
43508
43896
  if (!super.isValidRequest())
@@ -43530,6 +43918,14 @@ __decorate([
43530
43918
  (0, DataMember_1.NumberDataMember)({ code: GNParameterCode_1.GNParameterCode.Limit, defaultValue: 10, minValue: 1, maxValue: 100, mustInt: true, isOptional: true }),
43531
43919
  __metadata("design:type", Number)
43532
43920
  ], GetStatisticsLeaderboardAroundGroupOperationRequest.prototype, "limit", void 0);
43921
+ __decorate([
43922
+ (0, DataMember_1.BooleanDataMember)({ code: GNParameterCode_1.GNParameterCode.LoadFromCache, defaultValue: true, isOptional: true }),
43923
+ __metadata("design:type", Boolean)
43924
+ ], GetStatisticsLeaderboardAroundGroupOperationRequest.prototype, "loadFromCache", void 0);
43925
+ __decorate([
43926
+ (0, DataMember_1.StringDataMember)({ code: GNParameterCode_1.GNParameterCode.CatalogId, minLength: 2, maxLength: 32, mustNonNull: true, isOptional: true }),
43927
+ __metadata("design:type", String)
43928
+ ], GetStatisticsLeaderboardAroundGroupOperationRequest.prototype, "catalogId", void 0);
43533
43929
  class ServerGetStatisticsLeaderboardAroundGroupOperationRequest extends GetStatisticsLeaderboardAroundGroupOperationRequest {
43534
43930
  isValidRequest() {
43535
43931
  if (!super.isValidRequest())
@@ -43567,7 +43963,9 @@ class GetStatisticsLeaderboardAroundGroupRequestHandler extends GroupBaseRequest
43567
43963
  key: request.key,
43568
43964
  skip: request.skip,
43569
43965
  limit: request.limit,
43570
- infoRequestParam: request.infoRequestParam
43966
+ infoRequestParam: request.infoRequestParam,
43967
+ loadFromCache: request.loadFromCache,
43968
+ catalogId: request.catalogId,
43571
43969
  }, secretInfo, operationRequest);
43572
43970
  });
43573
43971
  }
@@ -43586,7 +43984,9 @@ class GetStatisticsLeaderboardAroundGroupRequestHandler extends GroupBaseRequest
43586
43984
  key: request.key,
43587
43985
  skip: request.skip,
43588
43986
  limit: request.limit,
43589
- infoRequestParam: request.infoRequestParam
43987
+ infoRequestParam: request.infoRequestParam,
43988
+ loadFromCache: request.loadFromCache,
43989
+ catalogId: request.catalogId,
43590
43990
  }, secretInfo, operationRequest);
43591
43991
  });
43592
43992
  }
@@ -43605,7 +44005,9 @@ class GetStatisticsLeaderboardAroundGroupRequestHandler extends GroupBaseRequest
43605
44005
  key: request.key,
43606
44006
  skip: request.skip,
43607
44007
  limit: request.limit,
43608
- infoRequestParam: request.infoRequestParam
44008
+ infoRequestParam: request.infoRequestParam,
44009
+ loadFromCache: request.loadFromCache,
44010
+ catalogId: request.catalogId,
43609
44011
  }, secretInfo, operationRequest);
43610
44012
  });
43611
44013
  }
@@ -43617,25 +44019,79 @@ class GetStatisticsLeaderboardAroundGroupRequestHandler extends GroupBaseRequest
43617
44019
  }
43618
44020
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
43619
44021
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
43620
- let groupFindOptions = this.convertToGroupFindOptions(request.infoRequestParam);
43621
- let masterGroupSettings = this.gnServer.getGNSettings().getGroupSettings(secretInfo.getGameId());
43622
- let groupStatisticsSettingsItem = masterGroupSettings.groupStatisticsSettings.find(x => x.key == request.key);
44022
+ let groupSettings = this.gnServer.getGNSettings().getGroupSettings(secretInfo.getGameId());
44023
+ let groupStatisticsSettingsItem = groupSettings.groupStatisticsSettings.find(x => x.key == request.key);
43623
44024
  if (groupStatisticsSettingsItem == null) {
43624
44025
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.KeyNotFound);
43625
44026
  return operationResponse;
43626
44027
  }
44028
+ let positionCacheKey = "groupStatisticsLeaderboardAroundPosition_" + request.groupId + "_" + request.key;
44029
+ let cacheKey = "groupStatisticsLeaderboardAround_" + request.groupId + "_" + request.key;
44030
+ if (request.catalogId) {
44031
+ cacheKey += "_" + request.catalogId;
44032
+ positionCacheKey += "_" + request.catalogId;
44033
+ }
44034
+ if (request.loadFromCache) {
44035
+ if (request.skip + request.limit > 100) {
44036
+ request.loadFromCache = false;
44037
+ }
44038
+ }
44039
+ if (request.loadFromCache) {
44040
+ if (!this.gnServer.getCacheData().isValid(cacheKey) || !this.gnServer.getCacheData().isValid(positionCacheKey)) {
44041
+ request.loadFromCache = false;
44042
+ }
44043
+ }
43627
44044
  let gnResults = new GNData_1.GNArray();
43628
- let statisticsAggregationMethod = groupStatisticsSettingsItem.statisticsAggregationMethod;
43629
- let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
43630
- let thisPosition = yield this.gnServer.getDatabase().loadPositionGroupLeaderboardWithStatisticsAsync(request.key, request.groupId, secretInfo.getGameId(), groupStatisticsSettingsItem.initialValue, direction);
43631
- let groups = yield this.gnServer.getDatabase().loadGroupsLeaderboardWithStatisticsAsync(request.key, thisPosition + request.skip, request.limit, secretInfo.getGameId(), direction, groupFindOptions);
43632
- for (let i = 0; i < groups.length; i++) {
43633
- let group = groups[i];
43634
- let gnResult = new GNData_1.GNHashtable();
43635
- gnResult.add(GNParameterCode_1.GNParameterCode.Position, i + thisPosition + request.skip);
43636
- gnResult.add(GNParameterCode_1.GNParameterCode.GroupId, group.getGroupId());
43637
- gnResult.add(GNParameterCode_1.GNParameterCode.InfoResponseParameters, this.generateInfoResponseParameters(group, request.infoRequestParam, secretInfo.getGameId()));
43638
- gnResults.add(gnResult);
44045
+ let thisPosition;
44046
+ let groups;
44047
+ if (request.loadFromCache) {
44048
+ thisPosition = this.gnServer.getCacheData().getData(positionCacheKey);
44049
+ groups = this.gnServer.getCacheData().getData(cacheKey);
44050
+ for (let i = request.skip; i < request.skip + request.limit; i++) {
44051
+ if (i >= groups.length)
44052
+ break;
44053
+ let group = groups[i];
44054
+ let gnResult = new GNData_1.GNHashtable();
44055
+ gnResult.add(GNParameterCode_1.GNParameterCode.Position, i + thisPosition);
44056
+ gnResult.add(GNParameterCode_1.GNParameterCode.GroupId, group.getGroupId());
44057
+ gnResult.add(GNParameterCode_1.GNParameterCode.InfoResponseParameters, this.generateInfoResponseParameters(group, request.infoRequestParam, secretInfo.getGameId()));
44058
+ gnResults.add(gnResult);
44059
+ }
44060
+ }
44061
+ else {
44062
+ let statisticsAggregationMethod = groupStatisticsSettingsItem.statisticsAggregationMethod;
44063
+ let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
44064
+ thisPosition = yield this.gnServer.getDatabase().loadPositionGroupLeaderboardWithStatisticsAsync(request.key, request.groupId, request.catalogId, secretInfo.getGameId(), groupStatisticsSettingsItem.initialValue, direction);
44065
+ if (thisPosition != -1) {
44066
+ this.gnServer.getCacheData().setData(positionCacheKey, thisPosition, xDatetime_1.xDatetime.ONE_MINUTE_MILLISECOND * 5);
44067
+ let groupFindOptions = this.convertToGroupFindOptions(request.infoRequestParam);
44068
+ if (request.skip + request.limit <= 100) {
44069
+ groupFindOptions = null;
44070
+ groups = yield this.gnServer.getDatabase().loadGroupsLeaderboardWithStatisticsAsync(request.key, thisPosition, 100, request.catalogId, secretInfo.getGameId(), direction, groupFindOptions);
44071
+ for (let i = request.skip; i < request.skip + request.limit; i++) {
44072
+ if (i >= groups.length)
44073
+ break;
44074
+ let group = groups[i];
44075
+ let gnResult = new GNData_1.GNHashtable();
44076
+ gnResult.add(GNParameterCode_1.GNParameterCode.Position, i + thisPosition);
44077
+ gnResult.add(GNParameterCode_1.GNParameterCode.GroupId, group.getGroupId());
44078
+ gnResult.add(GNParameterCode_1.GNParameterCode.InfoResponseParameters, this.generateInfoResponseParameters(group, request.infoRequestParam, secretInfo.getGameId()));
44079
+ gnResults.add(gnResult);
44080
+ }
44081
+ this.gnServer.getCacheData().setData(cacheKey, groups, xDatetime_1.xDatetime.ONE_MINUTE_MILLISECOND * 5);
44082
+ }
44083
+ else {
44084
+ groups = yield this.gnServer.getDatabase().loadGroupsLeaderboardWithStatisticsAsync(request.key, thisPosition + request.skip, request.limit, request.catalogId, secretInfo.getGameId(), direction, groupFindOptions);
44085
+ for (let i = 0; i < groups.length; i++) {
44086
+ let group = groups[i];
44087
+ let gnResult = new GNData_1.GNHashtable();
44088
+ gnResult.add(GNParameterCode_1.GNParameterCode.Position, i + thisPosition + request.skip);
44089
+ gnResult.add(GNParameterCode_1.GNParameterCode.GroupId, group.getGroupId());
44090
+ gnResult.add(GNParameterCode_1.GNParameterCode.InfoResponseParameters, this.generateInfoResponseParameters(group, request.infoRequestParam, secretInfo.getGameId()));
44091
+ gnResults.add(gnResult);
44092
+ }
44093
+ }
44094
+ }
43639
44095
  }
43640
44096
  operationResponse.setParameter(GNParameterCode_1.GNParameterCode.Results, gnResults);
43641
44097
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.Ok);
@@ -43717,6 +44173,10 @@ __decorate([
43717
44173
  (0, DataMember_1.StringDataMember)({ code: GNParameterCode_1.GNParameterCode.Version, minLength: 2, maxLength: 32, mustNonNull: true, isOptional: true }),
43718
44174
  __metadata("design:type", String)
43719
44175
  ], GetStatisticsLeaderboardOperationRequest.prototype, "version", void 0);
44176
+ __decorate([
44177
+ (0, DataMember_1.StringDataMember)({ code: GNParameterCode_1.GNParameterCode.CatalogId, minLength: 2, maxLength: 32, mustNonNull: true, isOptional: true }),
44178
+ __metadata("design:type", String)
44179
+ ], GetStatisticsLeaderboardOperationRequest.prototype, "catalogId", void 0);
43720
44180
  class ServerGetStatisticsLeaderboardOperationRequest extends GetStatisticsLeaderboardOperationRequest {
43721
44181
  isValidRequest() {
43722
44182
  if (!super.isValidRequest())
@@ -43755,6 +44215,7 @@ class GetStatisticsLeaderboardRequestHandler extends GroupBaseRequestHandler_1.G
43755
44215
  infoRequestParam: request.infoRequestParam,
43756
44216
  loadFromCache: request.loadFromCache,
43757
44217
  version: request.version,
44218
+ catalogId: request.catalogId,
43758
44219
  }, secretInfo, operationRequest);
43759
44220
  });
43760
44221
  }
@@ -43775,6 +44236,7 @@ class GetStatisticsLeaderboardRequestHandler extends GroupBaseRequestHandler_1.G
43775
44236
  infoRequestParam: request.infoRequestParam,
43776
44237
  loadFromCache: request.loadFromCache,
43777
44238
  version: request.version,
44239
+ catalogId: request.catalogId,
43778
44240
  }, secretInfo, operationRequest);
43779
44241
  });
43780
44242
  }
@@ -43795,6 +44257,7 @@ class GetStatisticsLeaderboardRequestHandler extends GroupBaseRequestHandler_1.G
43795
44257
  infoRequestParam: request.infoRequestParam,
43796
44258
  loadFromCache: request.loadFromCache,
43797
44259
  version: request.version,
44260
+ catalogId: request.catalogId,
43798
44261
  }, secretInfo, operationRequest);
43799
44262
  });
43800
44263
  }
@@ -43806,15 +44269,16 @@ class GetStatisticsLeaderboardRequestHandler extends GroupBaseRequestHandler_1.G
43806
44269
  }
43807
44270
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
43808
44271
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
43809
- let groupFindOptions = this.convertToGroupFindOptions(request.infoRequestParam);
43810
- let masterGroupSettings = this.gnServer.getGNSettings().getGroupSettings(secretInfo.getGameId());
43811
- let groupStatisticsSettingsItem = masterGroupSettings.groupStatisticsSettings.find(x => x.key == request.key);
44272
+ let groupSettings = this.gnServer.getGNSettings().getGroupSettings(secretInfo.getGameId());
44273
+ let groupStatisticsSettingsItem = groupSettings.groupStatisticsSettings.find(x => x.key == request.key);
43812
44274
  if (groupStatisticsSettingsItem == null) {
43813
44275
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.KeyNotFound);
43814
44276
  return operationResponse;
43815
44277
  }
43816
44278
  if (!request.version) {
43817
44279
  let cacheKey = "groupStatisticsLeaderboard_" + request.key;
44280
+ if (request.catalogId)
44281
+ cacheKey += "_" + request.catalogId;
43818
44282
  if (request.loadFromCache) {
43819
44283
  if (request.skip + request.limit > 100) {
43820
44284
  request.loadFromCache = false;
@@ -43825,8 +44289,6 @@ class GetStatisticsLeaderboardRequestHandler extends GroupBaseRequestHandler_1.G
43825
44289
  request.loadFromCache = false;
43826
44290
  }
43827
44291
  }
43828
- let statisticsAggregationMethod = groupStatisticsSettingsItem.statisticsAggregationMethod;
43829
- let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
43830
44292
  let gnResults = new GNData_1.GNArray();
43831
44293
  let groups;
43832
44294
  if (request.loadFromCache) {
@@ -43843,9 +44305,12 @@ class GetStatisticsLeaderboardRequestHandler extends GroupBaseRequestHandler_1.G
43843
44305
  }
43844
44306
  }
43845
44307
  else {
44308
+ let groupFindOptions = this.convertToGroupFindOptions(request.infoRequestParam);
44309
+ let statisticsAggregationMethod = groupStatisticsSettingsItem.statisticsAggregationMethod;
44310
+ let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
43846
44311
  if (request.skip + request.limit <= 100) {
43847
44312
  groupFindOptions = null;
43848
- groups = yield this.gnServer.getDatabase().loadGroupsLeaderboardWithStatisticsAsync(request.key, 0, 100, secretInfo.getGameId(), direction, groupFindOptions);
44313
+ groups = yield this.gnServer.getDatabase().loadGroupsLeaderboardWithStatisticsAsync(request.key, 0, 100, request.catalogId, secretInfo.getGameId(), direction, groupFindOptions);
43849
44314
  for (let i = request.skip; i < request.skip + request.limit; i++) {
43850
44315
  if (i >= groups.length)
43851
44316
  break;
@@ -43859,7 +44324,7 @@ class GetStatisticsLeaderboardRequestHandler extends GroupBaseRequestHandler_1.G
43859
44324
  this.gnServer.getCacheData().setData(cacheKey, groups, xDatetime_1.xDatetime.ONE_MINUTE_MILLISECOND * 5);
43860
44325
  }
43861
44326
  else {
43862
- groups = yield this.gnServer.getDatabase().loadGroupsLeaderboardWithStatisticsAsync(request.key, request.skip, request.limit, secretInfo.getGameId(), direction, groupFindOptions);
44327
+ groups = yield this.gnServer.getDatabase().loadGroupsLeaderboardWithStatisticsAsync(request.key, request.skip, request.limit, request.catalogId, secretInfo.getGameId(), direction, groupFindOptions);
43863
44328
  for (let i = 0; i < groups.length; i++) {
43864
44329
  let group = groups[i];
43865
44330
  let gnResult = new GNData_1.GNHashtable();
@@ -44059,11 +44524,11 @@ class GetStatisticsLogRequestHandler extends RequestHandler_1.RequestHandler {
44059
44524
  }
44060
44525
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
44061
44526
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
44062
- let masterPlayerSettings = this.gnServer.getGNSettings().getGroupSettings(secretInfo.getGameId());
44527
+ let groupSettings = this.gnServer.getGNSettings().getGroupSettings(secretInfo.getGameId());
44063
44528
  let keys = [];
44064
44529
  if (request.keys) {
44065
44530
  for (let i = 0; i < request.keys.length; i++) {
44066
- let playerStatisticsSettingsItem = masterPlayerSettings.groupStatisticsSettings.find(x => x.key == request.keys[i]);
44531
+ let playerStatisticsSettingsItem = groupSettings.groupStatisticsSettings.find(x => x.key == request.keys[i]);
44067
44532
  if (playerStatisticsSettingsItem != null) {
44068
44533
  keys.push(playerStatisticsSettingsItem.key);
44069
44534
  }
@@ -44461,7 +44926,7 @@ __decorate([
44461
44926
  __metadata("design:type", String)
44462
44927
  ], GrantGroupItemOperationRequest.prototype, "displayName", void 0);
44463
44928
  __decorate([
44464
- (0, DataMember_1.NumberDataMember)({ code: GNParameterCode_1.GNParameterCode.Amount, defaultValue: 1, isOptional: true }),
44929
+ (0, DataMember_1.NumberDataMember)({ code: GNParameterCode_1.GNParameterCode.Amount, defaultValue: 1, mustInt: true, isOptional: true }),
44465
44930
  __metadata("design:type", Number)
44466
44931
  ], GrantGroupItemOperationRequest.prototype, "amount", void 0);
44467
44932
  class ServerGrantGroupItemOperationRequest extends GrantGroupItemOperationRequest {
@@ -44568,7 +45033,7 @@ class GrantGroupItemRequestHandler extends GroupBaseRequestHandler_1.GroupBaseRe
44568
45033
  return operationResponse;
44569
45034
  }
44570
45035
  let amount = request.amount;
44571
- if (groupItemCatalogSettingsItem.itemType == ItemType_1.ItemType.NonConsumable) {
45036
+ if (groupItemCatalogSettingsItem.itemType == ItemType_1.ItemType.NonStackable) {
44572
45037
  amount = 1;
44573
45038
  }
44574
45039
  let itemId = StringUtility_1.StringUtility.generateRandomString(12, this.gnServer.getIdTypeCase());
@@ -50505,6 +50970,7 @@ const GNErrorCode_1 = __webpack_require__(94559);
50505
50970
  const ItemBaseRequestHandler_1 = __webpack_require__(72916);
50506
50971
  const InfoRequestParam_1 = __webpack_require__(55389);
50507
50972
  const xStatisticsAggregationMethod_1 = __webpack_require__(21554);
50973
+ const xDatetime_1 = __webpack_require__(21817);
50508
50974
  class GetStatisticsLeaderboardAroundItemOperationRequest extends OperationRequest_1.OperationRequest {
50509
50975
  isValidRequest() {
50510
50976
  if (!super.isValidRequest())
@@ -50532,6 +50998,14 @@ __decorate([
50532
50998
  (0, DataMember_1.NumberDataMember)({ code: GNParameterCode_1.GNParameterCode.Limit, defaultValue: 10, minValue: 1, maxValue: 100, mustInt: true, isOptional: true }),
50533
50999
  __metadata("design:type", Number)
50534
51000
  ], GetStatisticsLeaderboardAroundItemOperationRequest.prototype, "limit", void 0);
51001
+ __decorate([
51002
+ (0, DataMember_1.BooleanDataMember)({ code: GNParameterCode_1.GNParameterCode.LoadFromCache, defaultValue: true, isOptional: true }),
51003
+ __metadata("design:type", Boolean)
51004
+ ], GetStatisticsLeaderboardAroundItemOperationRequest.prototype, "loadFromCache", void 0);
51005
+ __decorate([
51006
+ (0, DataMember_1.StringDataMember)({ code: GNParameterCode_1.GNParameterCode.CatalogId, minLength: 2, maxLength: 32, mustNonNull: true, isOptional: true }),
51007
+ __metadata("design:type", String)
51008
+ ], GetStatisticsLeaderboardAroundItemOperationRequest.prototype, "catalogId", void 0);
50535
51009
  class ServerGetStatisticsLeaderboardAroundItemOperationRequest extends GetStatisticsLeaderboardAroundItemOperationRequest {
50536
51010
  isValidRequest() {
50537
51011
  if (!super.isValidRequest())
@@ -50569,7 +51043,9 @@ class GetStatisticsLeaderboardAroundItemRequestHandler extends ItemBaseRequestHa
50569
51043
  key: request.key,
50570
51044
  skip: request.skip,
50571
51045
  limit: request.limit,
50572
- infoRequestParam: request.infoRequestParam
51046
+ infoRequestParam: request.infoRequestParam,
51047
+ loadFromCache: request.loadFromCache,
51048
+ catalogId: request.catalogId,
50573
51049
  }, secretInfo, operationRequest);
50574
51050
  });
50575
51051
  }
@@ -50588,7 +51064,9 @@ class GetStatisticsLeaderboardAroundItemRequestHandler extends ItemBaseRequestHa
50588
51064
  key: request.key,
50589
51065
  skip: request.skip,
50590
51066
  limit: request.limit,
50591
- infoRequestParam: request.infoRequestParam
51067
+ infoRequestParam: request.infoRequestParam,
51068
+ loadFromCache: request.loadFromCache,
51069
+ catalogId: request.catalogId,
50592
51070
  }, secretInfo, operationRequest);
50593
51071
  });
50594
51072
  }
@@ -50607,7 +51085,9 @@ class GetStatisticsLeaderboardAroundItemRequestHandler extends ItemBaseRequestHa
50607
51085
  key: request.key,
50608
51086
  skip: request.skip,
50609
51087
  limit: request.limit,
50610
- infoRequestParam: request.infoRequestParam
51088
+ infoRequestParam: request.infoRequestParam,
51089
+ loadFromCache: request.loadFromCache,
51090
+ catalogId: request.catalogId,
50611
51091
  }, secretInfo, operationRequest);
50612
51092
  });
50613
51093
  }
@@ -50619,25 +51099,79 @@ class GetStatisticsLeaderboardAroundItemRequestHandler extends ItemBaseRequestHa
50619
51099
  }
50620
51100
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
50621
51101
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
50622
- let inventoryFindOptions = this.convertToInventoryFindOptions(request.infoRequestParam);
50623
- let masterItemSettings = this.gnServer.getGNSettings().getInventorySettings(secretInfo.getGameId());
50624
- let inventoryStatisticsSettingsItem = masterItemSettings.inventoryStatisticsSettings.find(x => x.key == request.key);
51102
+ let inventorySettings = this.gnServer.getGNSettings().getInventorySettings(secretInfo.getGameId());
51103
+ let inventoryStatisticsSettingsItem = inventorySettings.inventoryStatisticsSettings.find(x => x.key == request.key);
50625
51104
  if (inventoryStatisticsSettingsItem == null) {
50626
51105
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.KeyNotFound);
50627
51106
  return operationResponse;
50628
51107
  }
51108
+ let positionCacheKey = "inventoryStatisticsLeaderboardAroundPosition_" + request.itemId + "_" + request.key;
51109
+ let cacheKey = "inventoryStatisticsLeaderboardAround_" + request.itemId + "_" + request.key;
51110
+ if (request.catalogId) {
51111
+ cacheKey += "_" + request.catalogId;
51112
+ positionCacheKey += "_" + request.catalogId;
51113
+ }
51114
+ if (request.loadFromCache) {
51115
+ if (request.skip + request.limit > 100) {
51116
+ request.loadFromCache = false;
51117
+ }
51118
+ }
51119
+ if (request.loadFromCache) {
51120
+ if (!this.gnServer.getCacheData().isValid(cacheKey) || !this.gnServer.getCacheData().isValid(positionCacheKey)) {
51121
+ request.loadFromCache = false;
51122
+ }
51123
+ }
50629
51124
  let gnResults = new GNData_1.GNArray();
50630
- let statisticsAggregationMethod = inventoryStatisticsSettingsItem.statisticsAggregationMethod;
50631
- let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
50632
- let thisPosition = yield this.gnServer.getDatabase().loadPositionInventoryLeaderboardWithStatisticsAsync(request.key, request.itemId, secretInfo.getGameId(), inventoryStatisticsSettingsItem.initialValue, direction);
50633
- let inventorys = yield this.gnServer.getDatabase().loadInventoriesLeaderboardWithStatisticsAsync(request.key, thisPosition + request.skip, request.limit, secretInfo.getGameId(), direction, inventoryFindOptions);
50634
- for (let i = 0; i < inventorys.length; i++) {
50635
- let inventory = inventorys[i];
50636
- let gnResult = new GNData_1.GNHashtable();
50637
- gnResult.add(GNParameterCode_1.GNParameterCode.Position, i + thisPosition + request.skip);
50638
- gnResult.add(GNParameterCode_1.GNParameterCode.ItemId, inventory.getItemId());
50639
- gnResult.add(GNParameterCode_1.GNParameterCode.InfoResponseParameters, this.generateInfoResponseParameters(inventory, request.infoRequestParam, secretInfo.getGameId()));
50640
- gnResults.add(gnResult);
51125
+ let thisPosition;
51126
+ let inventories;
51127
+ if (request.loadFromCache) {
51128
+ thisPosition = this.gnServer.getCacheData().getData(positionCacheKey);
51129
+ inventories = this.gnServer.getCacheData().getData(cacheKey);
51130
+ for (let i = request.skip; i < request.skip + request.limit; i++) {
51131
+ if (i >= inventories.length)
51132
+ break;
51133
+ let inventory = inventories[i];
51134
+ let gnResult = new GNData_1.GNHashtable();
51135
+ gnResult.add(GNParameterCode_1.GNParameterCode.Position, i + thisPosition);
51136
+ gnResult.add(GNParameterCode_1.GNParameterCode.ItemId, inventory.getItemId());
51137
+ gnResult.add(GNParameterCode_1.GNParameterCode.InfoResponseParameters, this.generateInfoResponseParameters(inventory, request.infoRequestParam, secretInfo.getGameId()));
51138
+ gnResults.add(gnResult);
51139
+ }
51140
+ }
51141
+ else {
51142
+ let statisticsAggregationMethod = inventoryStatisticsSettingsItem.statisticsAggregationMethod;
51143
+ let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
51144
+ thisPosition = yield this.gnServer.getDatabase().loadPositionInventoryLeaderboardWithStatisticsAsync(request.key, request.itemId, request.catalogId, secretInfo.getGameId(), inventoryStatisticsSettingsItem.initialValue, direction);
51145
+ if (thisPosition != -1) {
51146
+ this.gnServer.getCacheData().setData(positionCacheKey, thisPosition, xDatetime_1.xDatetime.ONE_MINUTE_MILLISECOND * 5);
51147
+ let inventoryFindOptions = this.convertToInventoryFindOptions(request.infoRequestParam);
51148
+ if (request.skip + request.limit <= 100) {
51149
+ inventoryFindOptions = null;
51150
+ inventories = yield this.gnServer.getDatabase().loadInventoriesLeaderboardWithStatisticsAsync(request.key, thisPosition + request.skip, request.limit, request.catalogId, secretInfo.getGameId(), direction, inventoryFindOptions);
51151
+ for (let i = request.skip; i < request.skip + request.limit; i++) {
51152
+ if (i >= inventories.length)
51153
+ break;
51154
+ let inventory = inventories[i];
51155
+ let gnResult = new GNData_1.GNHashtable();
51156
+ gnResult.add(GNParameterCode_1.GNParameterCode.Position, i + thisPosition);
51157
+ gnResult.add(GNParameterCode_1.GNParameterCode.ItemId, inventory.getItemId());
51158
+ gnResult.add(GNParameterCode_1.GNParameterCode.InfoResponseParameters, this.generateInfoResponseParameters(inventory, request.infoRequestParam, secretInfo.getGameId()));
51159
+ gnResults.add(gnResult);
51160
+ }
51161
+ this.gnServer.getCacheData().setData(cacheKey, inventories, xDatetime_1.xDatetime.ONE_MINUTE_MILLISECOND * 5);
51162
+ }
51163
+ else {
51164
+ inventories = yield this.gnServer.getDatabase().loadInventoriesLeaderboardWithStatisticsAsync(request.key, thisPosition + request.skip, request.limit, request.catalogId, secretInfo.getGameId(), direction, inventoryFindOptions);
51165
+ for (let i = 0; i < inventories.length; i++) {
51166
+ let inventory = inventories[i];
51167
+ let gnResult = new GNData_1.GNHashtable();
51168
+ gnResult.add(GNParameterCode_1.GNParameterCode.Position, i + thisPosition + request.skip);
51169
+ gnResult.add(GNParameterCode_1.GNParameterCode.ItemId, inventory.getItemId());
51170
+ gnResult.add(GNParameterCode_1.GNParameterCode.InfoResponseParameters, this.generateInfoResponseParameters(inventory, request.infoRequestParam, secretInfo.getGameId()));
51171
+ gnResults.add(gnResult);
51172
+ }
51173
+ }
51174
+ }
50641
51175
  }
50642
51176
  operationResponse.setParameter(GNParameterCode_1.GNParameterCode.Results, gnResults);
50643
51177
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.Ok);
@@ -50719,6 +51253,10 @@ __decorate([
50719
51253
  (0, DataMember_1.StringDataMember)({ code: GNParameterCode_1.GNParameterCode.Version, minLength: 2, maxLength: 32, mustNonNull: true, isOptional: true }),
50720
51254
  __metadata("design:type", String)
50721
51255
  ], GetStatisticsLeaderboardOperationRequest.prototype, "version", void 0);
51256
+ __decorate([
51257
+ (0, DataMember_1.StringDataMember)({ code: GNParameterCode_1.GNParameterCode.CatalogId, minLength: 2, maxLength: 32, mustNonNull: true, isOptional: true }),
51258
+ __metadata("design:type", String)
51259
+ ], GetStatisticsLeaderboardOperationRequest.prototype, "catalogId", void 0);
50722
51260
  class ServerGetStatisticsLeaderboardOperationRequest extends GetStatisticsLeaderboardOperationRequest {
50723
51261
  isValidRequest() {
50724
51262
  if (!super.isValidRequest())
@@ -50757,6 +51295,7 @@ class GetStatisticsLeaderboardRequestHandler extends ItemBaseRequestHandler_1.It
50757
51295
  infoRequestParam: request.infoRequestParam,
50758
51296
  loadFromCache: request.loadFromCache,
50759
51297
  version: request.version,
51298
+ catalogId: request.catalogId,
50760
51299
  }, secretInfo, operationRequest);
50761
51300
  });
50762
51301
  }
@@ -50777,6 +51316,7 @@ class GetStatisticsLeaderboardRequestHandler extends ItemBaseRequestHandler_1.It
50777
51316
  infoRequestParam: request.infoRequestParam,
50778
51317
  loadFromCache: request.loadFromCache,
50779
51318
  version: request.version,
51319
+ catalogId: request.catalogId,
50780
51320
  }, secretInfo, operationRequest);
50781
51321
  });
50782
51322
  }
@@ -50797,6 +51337,7 @@ class GetStatisticsLeaderboardRequestHandler extends ItemBaseRequestHandler_1.It
50797
51337
  infoRequestParam: request.infoRequestParam,
50798
51338
  loadFromCache: request.loadFromCache,
50799
51339
  version: request.version,
51340
+ catalogId: request.catalogId,
50800
51341
  }, secretInfo, operationRequest);
50801
51342
  });
50802
51343
  }
@@ -50808,15 +51349,16 @@ class GetStatisticsLeaderboardRequestHandler extends ItemBaseRequestHandler_1.It
50808
51349
  }
50809
51350
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
50810
51351
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
50811
- let inventoryFindOptions = this.convertToInventoryFindOptions(request.infoRequestParam);
50812
- let masterItemSettings = this.gnServer.getGNSettings().getInventorySettings(secretInfo.getGameId());
50813
- let inventoryStatisticsSettingsItem = masterItemSettings.inventoryStatisticsSettings.find(x => x.key == request.key);
51352
+ let inventorySettings = this.gnServer.getGNSettings().getInventorySettings(secretInfo.getGameId());
51353
+ let inventoryStatisticsSettingsItem = inventorySettings.inventoryStatisticsSettings.find(x => x.key == request.key);
50814
51354
  if (inventoryStatisticsSettingsItem == null) {
50815
51355
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.KeyNotFound);
50816
51356
  return operationResponse;
50817
51357
  }
50818
51358
  if (!request.version) {
50819
51359
  let cacheKey = "inventoryStatisticsLeaderboard_" + request.key;
51360
+ if (request.catalogId)
51361
+ cacheKey += "_" + request.catalogId;
50820
51362
  if (request.loadFromCache) {
50821
51363
  if (request.skip + request.limit > 100) {
50822
51364
  request.loadFromCache = false;
@@ -50827,8 +51369,6 @@ class GetStatisticsLeaderboardRequestHandler extends ItemBaseRequestHandler_1.It
50827
51369
  request.loadFromCache = false;
50828
51370
  }
50829
51371
  }
50830
- let statisticsAggregationMethod = inventoryStatisticsSettingsItem.statisticsAggregationMethod;
50831
- let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
50832
51372
  let gnResults = new GNData_1.GNArray();
50833
51373
  let inventorys;
50834
51374
  if (request.loadFromCache) {
@@ -50845,9 +51385,12 @@ class GetStatisticsLeaderboardRequestHandler extends ItemBaseRequestHandler_1.It
50845
51385
  }
50846
51386
  }
50847
51387
  else {
51388
+ let inventoryFindOptions = this.convertToInventoryFindOptions(request.infoRequestParam);
51389
+ let statisticsAggregationMethod = inventoryStatisticsSettingsItem.statisticsAggregationMethod;
51390
+ let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
50848
51391
  if (request.skip + request.limit <= 100) {
50849
51392
  inventoryFindOptions = null;
50850
- inventorys = yield this.gnServer.getDatabase().loadInventoriesLeaderboardWithStatisticsAsync(request.key, 0, 100, secretInfo.getGameId(), direction, inventoryFindOptions);
51393
+ inventorys = yield this.gnServer.getDatabase().loadInventoriesLeaderboardWithStatisticsAsync(request.key, 0, 100, request.catalogId, secretInfo.getGameId(), direction, inventoryFindOptions);
50851
51394
  for (let i = request.skip; i < request.skip + request.limit; i++) {
50852
51395
  if (i >= inventorys.length)
50853
51396
  break;
@@ -50861,7 +51404,7 @@ class GetStatisticsLeaderboardRequestHandler extends ItemBaseRequestHandler_1.It
50861
51404
  this.gnServer.getCacheData().setData(cacheKey, inventorys, xDatetime_1.xDatetime.ONE_MINUTE_MILLISECOND * 5);
50862
51405
  }
50863
51406
  else {
50864
- inventorys = yield this.gnServer.getDatabase().loadInventoriesLeaderboardWithStatisticsAsync(request.key, request.skip, request.limit, secretInfo.getGameId(), direction, inventoryFindOptions);
51407
+ inventorys = yield this.gnServer.getDatabase().loadInventoriesLeaderboardWithStatisticsAsync(request.key, request.skip, request.limit, request.catalogId, secretInfo.getGameId(), direction, inventoryFindOptions);
50865
51408
  for (let i = 0; i < inventorys.length; i++) {
50866
51409
  let inventory = inventorys[i];
50867
51410
  let gnResult = new GNData_1.GNHashtable();
@@ -51061,11 +51604,11 @@ class GetStatisticsLogRequestHandler extends RequestHandler_1.RequestHandler {
51061
51604
  }
51062
51605
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
51063
51606
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
51064
- let masterPlayerSettings = this.gnServer.getGNSettings().getInventorySettings(secretInfo.getGameId());
51607
+ let inventorySettings = this.gnServer.getGNSettings().getInventorySettings(secretInfo.getGameId());
51065
51608
  let keys = [];
51066
51609
  if (request.keys) {
51067
51610
  for (let i = 0; i < request.keys.length; i++) {
51068
- let playerStatisticsSettingsItem = masterPlayerSettings.inventoryStatisticsSettings.find(x => x.key == request.keys[i]);
51611
+ let playerStatisticsSettingsItem = inventorySettings.inventoryStatisticsSettings.find(x => x.key == request.keys[i]);
51069
51612
  if (playerStatisticsSettingsItem != null) {
51070
51613
  keys.push(playerStatisticsSettingsItem.key);
51071
51614
  }
@@ -52268,8 +52811,8 @@ class SetAmountRequestHandler extends ItemBaseRequestHandler_1.ItemBaseRequestHa
52268
52811
  return operationResponse;
52269
52812
  }
52270
52813
  let itemType = inventory.getItemType();
52271
- if (itemType == ItemType_1.ItemType.NonConsumable) {
52272
- operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.ItemNotConsumable);
52814
+ if (itemType == ItemType_1.ItemType.NonStackable) {
52815
+ operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.ItemNotStackable);
52273
52816
  return operationResponse;
52274
52817
  }
52275
52818
  inventory.setAmount(inventory.getAmount() + request.amount);
@@ -55125,7 +55668,6 @@ class GetCurrencyLeaderboardRequestHandler extends MasterPlayerBaseRequestHandle
55125
55668
  }
55126
55669
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
55127
55670
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
55128
- let masterPlayerFindOptions = this.convertToMasterPlayerFindOptions(request.infoRequestParam);
55129
55671
  let masterPlayerSettings = this.gnServer.getGNSettings().getMasterPlayerSettings();
55130
55672
  let playerCurrencySettingsItem = masterPlayerSettings.playerCurrencySettings.find(x => x.key == request.key);
55131
55673
  if (playerCurrencySettingsItem == null) {
@@ -55159,6 +55701,7 @@ class GetCurrencyLeaderboardRequestHandler extends MasterPlayerBaseRequestHandle
55159
55701
  }
55160
55702
  }
55161
55703
  else {
55704
+ let masterPlayerFindOptions = this.convertToMasterPlayerFindOptions(request.infoRequestParam);
55162
55705
  if (request.skip + request.limit <= 100) {
55163
55706
  masterPlayerFindOptions = null;
55164
55707
  masterPlayers = yield this.gnServer.getDatabase().loadMasterPlayersLeaderboardWithCurrenciesAsync(request.key, 0, 100, masterPlayerFindOptions);
@@ -58955,6 +59498,7 @@ const GNErrorCode_1 = __webpack_require__(94559);
58955
59498
  const MasterPlayerBaseRequestHandler_1 = __webpack_require__(28575);
58956
59499
  const InfoRequestParam_1 = __webpack_require__(17818);
58957
59500
  const xStatisticsAggregationMethod_1 = __webpack_require__(21554);
59501
+ const xDatetime_1 = __webpack_require__(21817);
58958
59502
  class GetStatisticsLeaderboardAroundPlayerOperationRequest extends OperationRequest_1.OperationRequest {
58959
59503
  isValidRequest() {
58960
59504
  if (!super.isValidRequest())
@@ -58982,6 +59526,10 @@ __decorate([
58982
59526
  (0, DataMember_1.NumberDataMember)({ code: GNParameterCode_1.GNParameterCode.Limit, defaultValue: 10, minValue: 1, maxValue: 100, mustInt: true, isOptional: true }),
58983
59527
  __metadata("design:type", Number)
58984
59528
  ], GetStatisticsLeaderboardAroundPlayerOperationRequest.prototype, "limit", void 0);
59529
+ __decorate([
59530
+ (0, DataMember_1.BooleanDataMember)({ code: GNParameterCode_1.GNParameterCode.LoadFromCache, defaultValue: true, isOptional: true }),
59531
+ __metadata("design:type", Boolean)
59532
+ ], GetStatisticsLeaderboardAroundPlayerOperationRequest.prototype, "loadFromCache", void 0);
58985
59533
  class ServerGetStatisticsLeaderboardAroundPlayerOperationRequest extends GetStatisticsLeaderboardAroundPlayerOperationRequest {
58986
59534
  isValidRequest() {
58987
59535
  if (!super.isValidRequest())
@@ -59035,7 +59583,8 @@ class GetStatisticsLeaderboardAroundPlayerRequestHandler extends MasterPlayerBas
59035
59583
  key: request.key,
59036
59584
  skip: request.skip,
59037
59585
  limit: request.limit,
59038
- infoRequestParam: request.infoRequestParam
59586
+ infoRequestParam: request.infoRequestParam,
59587
+ loadFromCache: request.loadFromCache,
59039
59588
  }, secretInfo, operationRequest);
59040
59589
  });
59041
59590
  }
@@ -59054,7 +59603,8 @@ class GetStatisticsLeaderboardAroundPlayerRequestHandler extends MasterPlayerBas
59054
59603
  key: request.key,
59055
59604
  skip: request.skip,
59056
59605
  limit: request.limit,
59057
- infoRequestParam: request.infoRequestParam
59606
+ infoRequestParam: request.infoRequestParam,
59607
+ loadFromCache: request.loadFromCache,
59058
59608
  }, secretInfo, operationRequest);
59059
59609
  });
59060
59610
  }
@@ -59073,7 +59623,8 @@ class GetStatisticsLeaderboardAroundPlayerRequestHandler extends MasterPlayerBas
59073
59623
  key: request.key,
59074
59624
  skip: request.skip,
59075
59625
  limit: request.limit,
59076
- infoRequestParam: request.infoRequestParam
59626
+ infoRequestParam: request.infoRequestParam,
59627
+ loadFromCache: request.loadFromCache,
59077
59628
  }, secretInfo, operationRequest);
59078
59629
  });
59079
59630
  }
@@ -59085,25 +59636,75 @@ class GetStatisticsLeaderboardAroundPlayerRequestHandler extends MasterPlayerBas
59085
59636
  }
59086
59637
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
59087
59638
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
59088
- let masterPlayerFindOptions = this.convertToMasterPlayerFindOptions(request.infoRequestParam);
59089
59639
  let masterPlayerSettings = this.gnServer.getGNSettings().getMasterPlayerSettings();
59090
59640
  let playerStatisticsSettingsItem = masterPlayerSettings.playerStatisticsSettings.find(x => x.key == request.key);
59091
59641
  if (playerStatisticsSettingsItem == null) {
59092
59642
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.KeyNotFound);
59093
59643
  return operationResponse;
59094
59644
  }
59095
- let statisticsAggregationMethod = playerStatisticsSettingsItem.statisticsAggregationMethod;
59096
- let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
59645
+ let positionCacheKey = "masterPlayerStatisticsLeaderboardAroundPosition_" + request.userId + "_" + request.key;
59646
+ let cacheKey = "masterPlayerStatisticsLeaderboardAround_" + request.userId + "_" + request.key;
59647
+ if (request.loadFromCache) {
59648
+ if (request.skip + request.limit > 100) {
59649
+ request.loadFromCache = false;
59650
+ }
59651
+ }
59652
+ if (request.loadFromCache) {
59653
+ if (!this.gnServer.getCacheData().isValid(cacheKey) || !this.gnServer.getCacheData().isValid(positionCacheKey)) {
59654
+ request.loadFromCache = false;
59655
+ }
59656
+ }
59097
59657
  let gnResults = new GNData_1.GNArray();
59098
- let thisPosition = yield this.gnServer.getDatabase().loadPositionMasterPlayerLeaderboardWithStatisticsAsync(request.key, request.userId, playerStatisticsSettingsItem.initialValue, direction);
59099
- let masterPlayers = yield this.gnServer.getDatabase().loadMasterPlayersLeaderboardWithStatisticsAsync(request.key, thisPosition + request.skip, request.limit, direction, masterPlayerFindOptions);
59100
- for (let i = 0; i < masterPlayers.length; i++) {
59101
- let masterPlayer = masterPlayers[i];
59102
- let gnResult = new GNData_1.GNHashtable();
59103
- gnResult.add(GNParameterCode_1.GNParameterCode.Position, i + thisPosition + request.skip);
59104
- gnResult.add(GNParameterCode_1.GNParameterCode.UserId, masterPlayer.getUserId());
59105
- gnResult.add(GNParameterCode_1.GNParameterCode.InfoResponseParameters, this.generateInfoResponseParameters(masterPlayer, request.infoRequestParam));
59106
- gnResults.add(gnResult);
59658
+ let thisPosition;
59659
+ let masterPlayers;
59660
+ if (request.loadFromCache) {
59661
+ thisPosition = this.gnServer.getCacheData().getData(positionCacheKey);
59662
+ masterPlayers = this.gnServer.getCacheData().getData(cacheKey);
59663
+ for (let i = request.skip; i < request.skip + request.limit; i++) {
59664
+ if (i >= masterPlayers.length)
59665
+ break;
59666
+ let masterPlayer = masterPlayers[i];
59667
+ let gnResult = new GNData_1.GNHashtable();
59668
+ gnResult.add(GNParameterCode_1.GNParameterCode.Position, i + thisPosition);
59669
+ gnResult.add(GNParameterCode_1.GNParameterCode.UserId, masterPlayer.getUserId());
59670
+ gnResult.add(GNParameterCode_1.GNParameterCode.InfoResponseParameters, this.generateInfoResponseParameters(masterPlayer, request.infoRequestParam));
59671
+ gnResults.add(gnResult);
59672
+ }
59673
+ }
59674
+ else {
59675
+ let statisticsAggregationMethod = playerStatisticsSettingsItem.statisticsAggregationMethod;
59676
+ let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
59677
+ thisPosition = yield this.gnServer.getDatabase().loadPositionMasterPlayerLeaderboardWithStatisticsAsync(request.key, request.userId, playerStatisticsSettingsItem.initialValue, direction);
59678
+ if (thisPosition != -1) {
59679
+ this.gnServer.getCacheData().setData(positionCacheKey, thisPosition, xDatetime_1.xDatetime.ONE_MINUTE_MILLISECOND * 5);
59680
+ let masterPlayerFindOptions = this.convertToMasterPlayerFindOptions(request.infoRequestParam);
59681
+ if (request.skip + request.limit <= 100) {
59682
+ masterPlayerFindOptions = null;
59683
+ masterPlayers = yield this.gnServer.getDatabase().loadMasterPlayersLeaderboardWithStatisticsAsync(request.key, thisPosition, 100, direction, masterPlayerFindOptions);
59684
+ for (let i = request.skip; i < request.skip + request.limit; i++) {
59685
+ if (i >= masterPlayers.length)
59686
+ break;
59687
+ let masterPlayer = masterPlayers[i];
59688
+ let gnResult = new GNData_1.GNHashtable();
59689
+ gnResult.add(GNParameterCode_1.GNParameterCode.Position, i + thisPosition);
59690
+ gnResult.add(GNParameterCode_1.GNParameterCode.UserId, masterPlayer.getUserId());
59691
+ gnResult.add(GNParameterCode_1.GNParameterCode.InfoResponseParameters, this.generateInfoResponseParameters(masterPlayer, request.infoRequestParam));
59692
+ gnResults.add(gnResult);
59693
+ }
59694
+ this.gnServer.getCacheData().setData(cacheKey, masterPlayers, xDatetime_1.xDatetime.ONE_MINUTE_MILLISECOND * 5);
59695
+ }
59696
+ else {
59697
+ masterPlayers = yield this.gnServer.getDatabase().loadMasterPlayersLeaderboardWithStatisticsAsync(request.key, thisPosition + request.skip, request.limit, direction, masterPlayerFindOptions);
59698
+ for (let i = 0; i < masterPlayers.length; i++) {
59699
+ let masterPlayer = masterPlayers[i];
59700
+ let gnResult = new GNData_1.GNHashtable();
59701
+ gnResult.add(GNParameterCode_1.GNParameterCode.Position, i + thisPosition + request.skip);
59702
+ gnResult.add(GNParameterCode_1.GNParameterCode.UserId, masterPlayer.getUserId());
59703
+ gnResult.add(GNParameterCode_1.GNParameterCode.InfoResponseParameters, this.generateInfoResponseParameters(masterPlayer, request.infoRequestParam));
59704
+ gnResults.add(gnResult);
59705
+ }
59706
+ }
59707
+ }
59107
59708
  }
59108
59709
  operationResponse.setParameter(GNParameterCode_1.GNParameterCode.Results, gnResults);
59109
59710
  operationResponse.setParameter(ParameterCode_1.ParameterCode.ErrorCode, GNErrorCode_1.GNErrorCode.Ok);
@@ -59274,7 +59875,6 @@ class GetStatisticsLeaderboardRequestHandler extends MasterPlayerBaseRequestHand
59274
59875
  }
59275
59876
  operationResponse = new OperationResponse_1.OperationResponse(operationRequest.getOperationCode(), operationRequest.getRequestId(), operationRequest.isEncrypted());
59276
59877
  operationResponse.setReturnCode(ReturnCode_1.ReturnCode.Ok);
59277
- let masterPlayerFindOptions = this.convertToMasterPlayerFindOptions(request.infoRequestParam);
59278
59878
  let masterPlayerSettings = this.gnServer.getGNSettings().getMasterPlayerSettings();
59279
59879
  let playerStatisticsSettingsItem = masterPlayerSettings.playerStatisticsSettings.find(x => x.key == request.key);
59280
59880
  if (playerStatisticsSettingsItem == null) {
@@ -59293,8 +59893,6 @@ class GetStatisticsLeaderboardRequestHandler extends MasterPlayerBaseRequestHand
59293
59893
  request.loadFromCache = false;
59294
59894
  }
59295
59895
  }
59296
- let statisticsAggregationMethod = playerStatisticsSettingsItem.statisticsAggregationMethod;
59297
- let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
59298
59896
  let gnResults = new GNData_1.GNArray();
59299
59897
  let masterPlayers;
59300
59898
  if (request.loadFromCache) {
@@ -59311,6 +59909,9 @@ class GetStatisticsLeaderboardRequestHandler extends MasterPlayerBaseRequestHand
59311
59909
  }
59312
59910
  }
59313
59911
  else {
59912
+ let masterPlayerFindOptions = this.convertToMasterPlayerFindOptions(request.infoRequestParam);
59913
+ let statisticsAggregationMethod = playerStatisticsSettingsItem.statisticsAggregationMethod;
59914
+ let direction = statisticsAggregationMethod == xStatisticsAggregationMethod_1.xStatisticsAggregationMethod.Minimum ? 1 : -1;
59314
59915
  if (request.skip + request.limit <= 100) {
59315
59916
  masterPlayerFindOptions = null;
59316
59917
  masterPlayers = yield this.gnServer.getDatabase().loadMasterPlayersLeaderboardWithStatisticsAsync(request.key, 0, 100, direction, masterPlayerFindOptions);
@@ -76980,6 +77581,8 @@ class AnalyticsService {
76980
77581
  operationSystem: this.currentOperationSystem,
76981
77582
  requestComplete: this.currentRequestComplete,
76982
77583
  databaseSystem: this.currentDatabaseSystem,
77584
+ cost: this.currentCost,
77585
+ monthlyCost: this.currentMonthlyCost,
76983
77586
  };
76984
77587
  }
76985
77588
  else {
@@ -77005,6 +77608,8 @@ class AnalyticsService {
77005
77608
  operationSystem: null,
77006
77609
  requestComplete: null,
77007
77610
  databaseSystem: null,
77611
+ cost: null,
77612
+ monthlyCost: null,
77008
77613
  };
77009
77614
  }
77010
77615
  else {
@@ -77027,6 +77632,8 @@ class AnalyticsService {
77027
77632
  operationSystem: result["operationSystem"],
77028
77633
  requestComplete: result["requestComplete"],
77029
77634
  databaseSystem: result["databaseSystem"],
77635
+ cost: result["cost"],
77636
+ monthlyCost: result["monthlyCost"],
77030
77637
  };
77031
77638
  }
77032
77639
  }
@@ -77053,6 +77660,7 @@ class AnalyticsService {
77053
77660
  }
77054
77661
  getAnalytics() {
77055
77662
  return __awaiter(this, void 0, void 0, function* () {
77663
+ var _a, _b, _c, _d, _e, _f, _g, _h;
77056
77664
  let currentMilliseconds = xDatetime_1.xDatetime.getCurrentMilliseconds();
77057
77665
  let millisecondsSince0h = xDatetime_1.xDatetime.getToday0hMilliseconds();
77058
77666
  let playerCollection = this.gnServer.getDatabase().systemCollection("MasterPlayer");
@@ -77224,41 +77832,41 @@ class AnalyticsService {
77224
77832
  storageUsage: storageUsage
77225
77833
  };
77226
77834
  }
77227
- {
77228
- let eventCallbackPostCollection = this.gnServer.getDatabase().systemCollection("EventCallback.Post");
77229
- let results = yield eventCallbackPostCollection.aggregate([
77230
- {
77231
- $match: {
77232
- _id: { $gt: mongoDB.ObjectId.createFromTime(millisecondsAt15MinutesAgo / 1000 - 1) }
77233
- }
77234
- },
77235
- {
77236
- $group: {
77237
- _id: { eventName: "$eventName", E: "$operationResponse.parameters.E" },
77238
- count: { $sum: 1 } // Đếm số lần xuất hiện
77239
- }
77240
- },
77241
- {
77242
- $group: {
77243
- _id: "$_id.eventName",
77244
- results: {
77245
- $push: {
77246
- errorCode: "$_id.E",
77247
- count: "$count"
77248
- }
77249
- }
77250
- }
77251
- }
77252
- ]);
77253
- this.currentRequestComplete = [];
77254
- while (yield results.hasNext()) {
77255
- let result = yield results.next();
77256
- this.currentRequestComplete.push({
77257
- eventName: result["_id"],
77258
- results: result.results,
77259
- });
77260
- }
77261
- }
77835
+ // {
77836
+ // let eventCallbackPostCollection = this.gnServer.getDatabase().systemCollection("EventCallback.Post");
77837
+ // let results = await eventCallbackPostCollection.aggregate([
77838
+ // {
77839
+ // $match: {
77840
+ // _id: { $gt: mongoDB.ObjectId.createFromTime(millisecondsAt15MinutesAgo / 1000 - 1) }
77841
+ // }
77842
+ // },
77843
+ // {
77844
+ // $group: {
77845
+ // _id: { eventName: "$eventName", E: "$operationResponse.parameters.E" },
77846
+ // count: { $sum: 1 } // Đếm số lần xuất hiện
77847
+ // }
77848
+ // },
77849
+ // {
77850
+ // $group: {
77851
+ // _id: "$_id.eventName",
77852
+ // results: {
77853
+ // $push: {
77854
+ // errorCode: "$_id.E",
77855
+ // count: "$count"
77856
+ // }
77857
+ // }
77858
+ // }
77859
+ // }
77860
+ // ]);
77861
+ // this.currentRequestComplete = [];
77862
+ // while (await results.hasNext()) {
77863
+ // let result = await results.next();
77864
+ // this.currentRequestComplete.push({
77865
+ // eventName: result["_id"],
77866
+ // results: result.results,
77867
+ // });
77868
+ // }
77869
+ // }
77262
77870
  {
77263
77871
  let stats = yield this.gnServer.getDatabase().getDb().stats();
77264
77872
  if (stats.ok == 1) {
@@ -77272,6 +77880,101 @@ class AnalyticsService {
77272
77880
  };
77273
77881
  }
77274
77882
  }
77883
+ {
77884
+ let eventCallbackPostCollection = this.gnServer.getDatabase().systemCollection("EventCallback.Post");
77885
+ let now = xDatetime_1.xDatetime.getCurrentDate();
77886
+ let month0h = new Date(now.getFullYear(), now.getMonth(), 1);
77887
+ let results = yield eventCallbackPostCollection.find({ _id: { $gt: mongoDB.ObjectId.createFromTime(month0h.getTime() / 1000 - 1) } });
77888
+ this.currentCost = {
77889
+ requestCount: 0,
77890
+ matchmakingRequestCount: 0,
77891
+ cloudScriptGBs: 0,
77892
+ storageSizeInBytes: (_b = (_a = this.currentDatabaseSystem) === null || _a === void 0 ? void 0 : _a.totalSizeInBytes) !== null && _b !== void 0 ? _b : 0,
77893
+ dataTransferSizeInBytes: 0,
77894
+ };
77895
+ this.currentMonthlyCost = {
77896
+ requestCount: 0,
77897
+ matchmakingRequestCount: 0,
77898
+ cloudScriptGBs: 0,
77899
+ storageSizeInBytes: (_d = (_c = this.currentDatabaseSystem) === null || _c === void 0 ? void 0 : _c.totalSizeInBytes) !== null && _d !== void 0 ? _d : 0,
77900
+ dataTransferSizeInBytes: 0,
77901
+ };
77902
+ this.currentRequestComplete = [];
77903
+ while (yield results.hasNext()) {
77904
+ let result = yield results.next();
77905
+ let tsCreate = result["tsCreate"];
77906
+ let eventName = result["eventName"];
77907
+ let operationResponse = result["operationResponse"];
77908
+ if (tsCreate > millisecondsAt15MinutesAgo) {
77909
+ let thisCurrentRequestComplete = this.currentRequestComplete.find(x => x.eventName == eventName);
77910
+ if (thisCurrentRequestComplete == null) {
77911
+ thisCurrentRequestComplete = {
77912
+ eventName: eventName,
77913
+ results: [],
77914
+ };
77915
+ this.currentRequestComplete.push(thisCurrentRequestComplete);
77916
+ }
77917
+ let errorCode = (_e = operationResponse === null || operationResponse === void 0 ? void 0 : operationResponse.parameters) === null || _e === void 0 ? void 0 : _e.E;
77918
+ if (errorCode) {
77919
+ let thisCurrentRequestCompleteErrorCode = thisCurrentRequestComplete.results.find(x => x.errorCode == errorCode);
77920
+ if (thisCurrentRequestCompleteErrorCode == null) {
77921
+ thisCurrentRequestCompleteErrorCode = {
77922
+ errorCode: errorCode,
77923
+ count: 0,
77924
+ };
77925
+ thisCurrentRequestComplete.results.push(thisCurrentRequestCompleteErrorCode);
77926
+ }
77927
+ thisCurrentRequestCompleteErrorCode.count += 1;
77928
+ }
77929
+ if (!eventName.startsWith("dashboard_")) {
77930
+ if (!eventName.startWith("system_")) {
77931
+ this.currentCost.requestCount += 1;
77932
+ this.currentMonthlyCost.requestCount += 1;
77933
+ if (eventName.startWith("multiplayer_")) {
77934
+ this.currentCost.matchmakingRequestCount += 1;
77935
+ this.currentMonthlyCost.matchmakingRequestCount += 1;
77936
+ }
77937
+ else if (eventName.startWith("cloudScript_")) {
77938
+ let parameters = operationResponse === null || operationResponse === void 0 ? void 0 : operationResponse.parameters;
77939
+ if (parameters) {
77940
+ let executionTimeInMs = parameters.executionTimeInMs;
77941
+ let memoryUsedInBytes = parameters.memoryUsedInBytes;
77942
+ if (executionTimeInMs != null && memoryUsedInBytes != null) {
77943
+ let cloudScriptGBs = (executionTimeInMs / 1000) * (memoryUsedInBytes / 1024 / 1024 / 1024);
77944
+ this.currentCost.cloudScriptGBs += cloudScriptGBs;
77945
+ this.currentMonthlyCost.cloudScriptGBs += cloudScriptGBs;
77946
+ }
77947
+ }
77948
+ }
77949
+ }
77950
+ this.currentCost.dataTransferSizeInBytes += (_f = result.responseSize) !== null && _f !== void 0 ? _f : 0;
77951
+ this.currentMonthlyCost.dataTransferSizeInBytes += (_g = result.responseSize) !== null && _g !== void 0 ? _g : 0;
77952
+ }
77953
+ }
77954
+ else {
77955
+ if (!eventName.startsWith("dashboard_")) {
77956
+ if (!eventName.startWith("system_")) {
77957
+ this.currentMonthlyCost.requestCount += 1;
77958
+ if (eventName.startWith("multiplayer_")) {
77959
+ this.currentMonthlyCost.matchmakingRequestCount += 1;
77960
+ }
77961
+ else if (eventName.startWith("cloudScript_")) {
77962
+ let parameters = operationResponse === null || operationResponse === void 0 ? void 0 : operationResponse.parameters;
77963
+ if (parameters) {
77964
+ let executionTimeInMs = parameters.executionTimeInMs;
77965
+ let memoryUsedInBytes = parameters.memoryUsedInBytes;
77966
+ if (executionTimeInMs != null && memoryUsedInBytes != null) {
77967
+ let cloudScriptGBs = (executionTimeInMs / 1000) * (memoryUsedInBytes / 1024 / 1024 / 1024);
77968
+ this.currentMonthlyCost.cloudScriptGBs += cloudScriptGBs;
77969
+ }
77970
+ }
77971
+ }
77972
+ }
77973
+ this.currentMonthlyCost.dataTransferSizeInBytes += (_h = result.responseSize) !== null && _h !== void 0 ? _h : 0;
77974
+ }
77975
+ }
77976
+ }
77977
+ }
77275
77978
  });
77276
77979
  }
77277
77980
  saveAnalytics() {
@@ -77300,6 +78003,8 @@ class AnalyticsService {
77300
78003
  operationSystem: this.currentOperationSystem,
77301
78004
  requestComplete: this.currentRequestComplete,
77302
78005
  databaseSystem: this.currentDatabaseSystem,
78006
+ cost: this.currentCost,
78007
+ monthlyCost: this.currentMonthlyCost,
77303
78008
  tsCreate: currentDate.getTime()
77304
78009
  });
77305
78010
  });
@@ -78072,6 +78777,7 @@ var EventCallbackType;
78072
78777
  EventCallbackType[EventCallbackType["Pre"] = 0] = "Pre";
78073
78778
  EventCallbackType[EventCallbackType["Post"] = 1] = "Post";
78074
78779
  EventCallbackType[EventCallbackType["System"] = 2] = "System";
78780
+ EventCallbackType[EventCallbackType["Event"] = 3] = "Event";
78075
78781
  })(EventCallbackType || (EventCallbackType = {}));
78076
78782
  var CloudScriptEventType;
78077
78783
  (function (CloudScriptEventType) {
@@ -78268,6 +78974,76 @@ class EventCallbackCloudScriptService {
78268
78974
  };
78269
78975
  });
78270
78976
  }
78977
+ executeEvent(eventName, request, operationEvent) {
78978
+ return __awaiter(this, void 0, void 0, function* () {
78979
+ let cloudFunction = this.cloudScriptFunctionDict.get("system");
78980
+ if (cloudFunction == null) {
78981
+ xDebug_1.Debug.logError("[GN] [SystemEventCallback] system not found");
78982
+ return;
78983
+ }
78984
+ let cloudScriptWorker = this.loadCloudScriptFunctionWorkerFromCache(cloudFunction.type, eventName);
78985
+ if (cloudScriptWorker == null) {
78986
+ xDebug_1.Debug.logError("[GN] [SystemEventCallback] worker not found at " + cloudFunction.type);
78987
+ return;
78988
+ }
78989
+ let requestId = StringUtility_1.StringUtility.generateRandomString(10, 0);
78990
+ let cloudScriptRequest = {
78991
+ requestId: requestId,
78992
+ eventName: eventName,
78993
+ eventType: EventCallbackType.Event,
78994
+ operationRequest: {
78995
+ operationCode: operationEvent.getEventCode(),
78996
+ encrypted: operationEvent.isEncrypted(),
78997
+ parameters: operationEvent.getParameters(),
78998
+ requestId: 0,
78999
+ },
79000
+ request: request,
79001
+ secretInfo: null,
79002
+ };
79003
+ cloudScriptWorker.postMessage(cloudScriptRequest);
79004
+ let thiz = this;
79005
+ let isResolved = false;
79006
+ let cloudScriptResponse = yield new Promise((resolve) => {
79007
+ let timeout = setTimeout(() => {
79008
+ if (isResolved)
79009
+ return;
79010
+ isResolved = true;
79011
+ resolve({
79012
+ responseId: requestId,
79013
+ response: {
79014
+ status: ICloudScriptService_1.ExecuteResponseStatus.Timeout,
79015
+ errorMessage: "function execute timeout",
79016
+ result: null,
79017
+ request: null,
79018
+ },
79019
+ stats: null,
79020
+ logs: [],
79021
+ });
79022
+ }, EventCallbackCloudScriptService.SystemExecuteTimeoutInMs);
79023
+ thiz.cloudScriptWaitingResponseCallbackDict.set(requestId, (cloudScriptResponse) => {
79024
+ if (isResolved)
79025
+ return;
79026
+ isResolved = true;
79027
+ clearTimeout(timeout);
79028
+ resolve(cloudScriptResponse);
79029
+ });
79030
+ });
79031
+ this.cloudScriptWaitingResponseCallbackDict.delete(requestId);
79032
+ if (cloudScriptResponse.logs.length != 0)
79033
+ xDebug_1.Debug.log(JSON.stringify(cloudScriptResponse.logs));
79034
+ if (cloudScriptResponse.response.status == ICloudScriptService_1.ExecuteResponseStatus.Ok) {
79035
+ operationEvent.setParameters(cloudScriptResponse.response.result.parameters ? GNData_1.GNHashtable.builder().addAll(cloudScriptResponse.response.result.parameters).build() : null);
79036
+ operationEvent.setEncrypted(cloudScriptResponse.response.result.encrypted);
79037
+ operationEvent.eventCode = cloudScriptResponse.response.result.returnCode;
79038
+ if (cloudScriptResponse.response.request.userId)
79039
+ request.userId = cloudScriptResponse.response.request.userId;
79040
+ if (cloudScriptResponse.response.request.userIds)
79041
+ request.userIds = cloudScriptResponse.response.request.userIds;
79042
+ if (cloudScriptResponse.response.request.roomId)
79043
+ request.roomId = cloudScriptResponse.response.request.roomId;
79044
+ }
79045
+ });
79046
+ }
78271
79047
  executePre(eventName, request, secretInfo, operationRequest) {
78272
79048
  return __awaiter(this, void 0, void 0, function* () {
78273
79049
  var _a;
@@ -78662,14 +79438,16 @@ class PostEventCallbackService {
78662
79438
  if (this.cloudScriptService) {
78663
79439
  this.cloudScriptService.executePost(eventName, request, secretInfo, operationRequest, operationResponse);
78664
79440
  }
79441
+ let operationResponseToData = OperationHelper_1.OperationHelper.toDataOperationResponse(operationResponse);
78665
79442
  this.eventCallbackCollection.insertOne({
78666
79443
  eventName: eventName,
78667
79444
  tsCreate: xDatetime_1.xDatetime.getCurrentMilliseconds(),
78668
79445
  request: request,
78669
79446
  operationRequest: OperationHelper_1.OperationHelper.toDataOperationRequest(operationRequest),
78670
79447
  originRequest: OperationHelper_1.OperationHelper.toDataFromRequest(operationRequest.originRequest),
78671
- operationResponse: OperationHelper_1.OperationHelper.toDataOperationResponse(operationResponse),
79448
+ operationResponse: operationResponseToData,
78672
79449
  customTags: operationRequest.getParameters().getGNHashtable("CustomTags"),
79450
+ responseSize: Buffer.byteLength(JSON.stringify(operationResponseToData), "utf-8"),
78673
79451
  });
78674
79452
  if (!this.eventLstDict.has(eventName)) {
78675
79453
  return;
@@ -80824,12 +81602,13 @@ exports.RequestConverterService = RequestConverterService;
80824
81602
 
80825
81603
  Object.defineProperty(exports, "__esModule", ({ value: true }));
80826
81604
  exports.TimerService = void 0;
81605
+ const xDatetime_1 = __webpack_require__(21817);
80827
81606
  const xDebug_1 = __webpack_require__(32501);
80828
81607
  class TimerService {
80829
81608
  run() {
80830
81609
  setInterval(() => {
80831
81610
  this.onEverySecond();
80832
- let now = new Date();
81611
+ let now = xDatetime_1.xDatetime.getCurrentDate();
80833
81612
  if (now.getSeconds() == 0) {
80834
81613
  this.onEveryMinute();
80835
81614
  if (now.getMinutes() == 0) {
@@ -81538,8 +82317,8 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
81538
82317
  exports.ItemType = void 0;
81539
82318
  var ItemType;
81540
82319
  (function (ItemType) {
81541
- ItemType[ItemType["NonConsumable"] = 1] = "NonConsumable";
81542
- ItemType[ItemType["Consumable"] = 2] = "Consumable";
82320
+ ItemType[ItemType["NonStackable"] = 1] = "NonStackable";
82321
+ ItemType[ItemType["Stackable"] = 2] = "Stackable";
81543
82322
  })(ItemType || (exports.ItemType = ItemType = {}));
81544
82323
 
81545
82324
 
@@ -81715,7 +82494,7 @@ GNErrorCode.GamePlayerNotFound = 17;
81715
82494
  GNErrorCode.FileNotFound = 18;
81716
82495
  GNErrorCode.FileNotUpload = 19;
81717
82496
  GNErrorCode.OwnerTypeNotSupport = 20;
81718
- GNErrorCode.ItemNotConsumable = 21;
82497
+ GNErrorCode.ItemNotStackable = 21;
81719
82498
  GNErrorCode.GameNotFound = 22;
81720
82499
  GNErrorCode.GameIsExists = 23;
81721
82500
  GNErrorCode.SecretInfoNotFound = 24;
@@ -82336,6 +83115,13 @@ GNParameterCode.Collections = "collections";
82336
83115
  GNParameterCode.Objects = "objects";
82337
83116
  GNParameterCode.Indexes = "indexes";
82338
83117
  GNParameterCode.DatabaseSystem = "databaseSystem";
83118
+ GNParameterCode.Cost = "cost";
83119
+ GNParameterCode.MonthlyCost = "monthlyCost";
83120
+ GNParameterCode.RequestCount = "requestCount";
83121
+ GNParameterCode.MatchmakingRequestCount = "matchmakingRequestCount";
83122
+ GNParameterCode.CloudScriptGBs = "cloudScriptGBs";
83123
+ GNParameterCode.StorageSizeInBytes = "storageSizeInBytes";
83124
+ GNParameterCode.DataTransferSizeInBytes = "dataTransferSizeInBytes";
82339
83125
 
82340
83126
 
82341
83127
  /***/ }),
@@ -83671,6 +84457,18 @@ class xCacheData {
83671
84457
  return false;
83672
84458
  return true;
83673
84459
  }
84460
+ removeInvalidData() {
84461
+ let removeCount = 0;
84462
+ let keys = this.dataDic.keys();
84463
+ for (let key in keys) {
84464
+ let cacheItem = this.dataDic.get(key);
84465
+ if (cacheItem == null || cacheItem.isExpired()) {
84466
+ this.dataDic.delete(key);
84467
+ removeCount++;
84468
+ }
84469
+ }
84470
+ return removeCount;
84471
+ }
83674
84472
  constructor() {
83675
84473
  this.dataDic = new Map();
83676
84474
  }
@@ -86130,9 +86928,9 @@ class xDatabase {
86130
86928
  loadMasterPlayersWithGenericServiceAsync(genericService, genericIds, masterPlayerFindOptions) {
86131
86929
  return __awaiter(this, void 0, void 0, function* () {
86132
86930
  let collection = this.systemCollection("MasterPlayer");
86133
- let filter = {};
86134
- filter["external.genericService.genericServices." + genericService] = { $in: { "genericId": genericIds } };
86135
- let results = yield collection.find(filter, {
86931
+ let $filter = {};
86932
+ $filter["external.genericService.genericServices." + genericService] = { $in: { "genericId": genericIds } };
86933
+ let results = yield collection.find($filter, {
86136
86934
  projection: this.getFindOptions(masterPlayerFindOptions)
86137
86935
  });
86138
86936
  return this.convertToMasterPlayers(results, collection);
@@ -86253,14 +87051,14 @@ class xDatabase {
86253
87051
  score = playerStatistics.value;
86254
87052
  tsLastUpdate = playerStatistics.tsLastUpdate;
86255
87053
  }
86256
- let filter = {};
87054
+ let $filter = {};
86257
87055
  if (direction == -1) {
86258
87056
  let condition1 = {};
86259
87057
  let condition2 = {};
86260
87058
  condition1["playerStatistics." + key + ".value"] = { $gt: score };
86261
87059
  condition2["playerStatistics." + key + ".value"] = score;
86262
87060
  condition2["playerStatistics." + key + ".tsLastUpdate"] = { $lt: tsLastUpdate };
86263
- filter.$or = [condition1, condition2];
87061
+ $filter.$or = [condition1, condition2];
86264
87062
  }
86265
87063
  else {
86266
87064
  let condition1 = {};
@@ -86268,9 +87066,9 @@ class xDatabase {
86268
87066
  condition1["playerStatistics." + key + ".value"] = { $lt: score };
86269
87067
  condition2["playerStatistics." + key + ".value"] = score;
86270
87068
  condition2["playerStatistics." + key + ".tsLastUpdate"] = { $lt: tsLastUpdate };
86271
- filter.$or = [condition1, condition2];
87069
+ $filter.$or = [condition1, condition2];
86272
87070
  }
86273
- return yield collection.countDocuments(filter);
87071
+ return yield collection.countDocuments($filter);
86274
87072
  });
86275
87073
  }
86276
87074
  loadPositionMasterPlayerLeaderboardWithCurrencies(key, userId) {
@@ -86287,13 +87085,13 @@ class xDatabase {
86287
87085
  if (playerCurrencies != null) {
86288
87086
  score = playerCurrencies.value;
86289
87087
  }
86290
- let filter = {};
86291
- filter["playerCurrencies." + key] = {
87088
+ let $filter = {};
87089
+ $filter["playerCurrencies." + key] = {
86292
87090
  $gt: {
86293
87091
  value: score,
86294
87092
  }
86295
87093
  };
86296
- return yield collection.countDocuments(filter);
87094
+ return yield collection.countDocuments($filter);
86297
87095
  });
86298
87096
  }
86299
87097
  loadMasterPlayerAsync(userId, masterPlayerFindOptions) {
@@ -86492,9 +87290,9 @@ class xDatabase {
86492
87290
  loadMasterPlayerByGenericServiceAsync(serviceName, serviceId, masterPlayerFindOptions) {
86493
87291
  return __awaiter(this, void 0, void 0, function* () {
86494
87292
  let collection = this.systemCollection("MasterPlayer");
86495
- let filter = {};
86496
- filter["external.genericService.genericServices." + serviceName + ".serviceId"] = serviceId;
86497
- let result = yield collection.findOne(filter, {
87293
+ let $filter = {};
87294
+ $filter["external.genericService.genericServices." + serviceName + ".serviceId"] = serviceId;
87295
+ let result = yield collection.findOne($filter, {
86498
87296
  projection: this.getFindOptions(masterPlayerFindOptions)
86499
87297
  });
86500
87298
  if (result) {
@@ -86648,14 +87446,14 @@ class xDatabase {
86648
87446
  score = playerStatistics.value;
86649
87447
  tsLastUpdate = playerStatistics.tsLastUpdate;
86650
87448
  }
86651
- let filter = {};
87449
+ let $filter = {};
86652
87450
  if (direction == -1) {
86653
87451
  let condition1 = {};
86654
87452
  let condition2 = {};
86655
87453
  condition1["playerStatistics." + key + ".value"] = { $gt: score };
86656
87454
  condition2["playerStatistics." + key + ".value"] = score;
86657
87455
  condition2["playerStatistics." + key + ".tsLastUpdate"] = { $lt: tsLastUpdate };
86658
- filter.$or = [condition1, condition2];
87456
+ $filter.$or = [condition1, condition2];
86659
87457
  }
86660
87458
  else {
86661
87459
  let condition1 = {};
@@ -86663,9 +87461,9 @@ class xDatabase {
86663
87461
  condition1["playerStatistics." + key + ".value"] = { $lt: score };
86664
87462
  condition2["playerStatistics." + key + ".value"] = score;
86665
87463
  condition2["playerStatistics." + key + ".tsLastUpdate"] = { $lt: tsLastUpdate };
86666
- filter.$or = [condition1, condition2];
87464
+ $filter.$or = [condition1, condition2];
86667
87465
  }
86668
- return yield collection.countDocuments(filter);
87466
+ return yield collection.countDocuments($filter);
86669
87467
  });
86670
87468
  }
86671
87469
  loadPositionGamePlayerLeaderboardWithCurrenciesAsync(key, userId, gameId) {
@@ -86682,13 +87480,13 @@ class xDatabase {
86682
87480
  if (playerCurrencies != null) {
86683
87481
  score = playerCurrencies.value;
86684
87482
  }
86685
- let filter = {};
86686
- filter["playerCurrencies." + key] = {
87483
+ let $filter = {};
87484
+ $filter["playerCurrencies." + key] = {
86687
87485
  $gt: {
86688
87486
  value: score,
86689
87487
  }
86690
87488
  };
86691
- return yield collection.countDocuments(filter);
87489
+ return yield collection.countDocuments($filter);
86692
87490
  });
86693
87491
  }
86694
87492
  loadGamePlayerAsync(userId, gameId, gamePlayerFindOptions) {
@@ -86840,23 +87638,29 @@ class xDatabase {
86840
87638
  return this.convertToCharacterPlayers(results, collection);
86841
87639
  });
86842
87640
  }
86843
- loadCharacterPlayersLeaderboardWithStatisticsAsync(key, skip, limit, gameId, direction, characterPlayerFindOptions) {
87641
+ loadCharacterPlayersLeaderboardWithStatisticsAsync(key, skip, limit, catalogId, gameId, direction, characterPlayerFindOptions) {
86844
87642
  return __awaiter(this, void 0, void 0, function* () {
86845
87643
  let collection = this.systemGameCollection("CharacterPlayer", gameId);
86846
87644
  let $sort = {};
86847
87645
  $sort["playerStatistics." + key + ".value"] = direction;
86848
87646
  $sort["playerStatistics." + key + ".tsLastUpdate"] = 1;
86849
- let results = yield collection.find({}, {
87647
+ let $filter = {};
87648
+ if (catalogId) {
87649
+ $filter["catalogId"] = catalogId;
87650
+ }
87651
+ let results = yield collection.find($filter, {
86850
87652
  projection: this.getFindOptions(characterPlayerFindOptions)
86851
87653
  }).sort($sort).skip(skip).limit(limit);
86852
87654
  return this.convertToCharacterPlayers(results, collection);
86853
87655
  });
86854
87656
  }
86855
- loadCharacterPlayersLeaderboardWithStatisticsAllAsync(key, gameId, direction, characterPlayerFindOptions) {
87657
+ loadCharacterPlayersLeaderboardWithStatisticsAllAsync(key, catalogId, gameId, direction, characterPlayerFindOptions) {
86856
87658
  return __awaiter(this, void 0, void 0, function* () {
86857
87659
  let collection = this.systemGameCollection("CharacterPlayer", gameId);
86858
87660
  let $filter = {};
86859
87661
  $filter["playerStatistics." + key + ".value"] = { $ne: null };
87662
+ if (catalogId)
87663
+ $filter["catalogId"] = catalogId;
86860
87664
  let $sort = {};
86861
87665
  $sort["playerStatistics." + key + ".value"] = direction;
86862
87666
  $sort["playerStatistics." + key + ".tsLastUpdate"] = 1;
@@ -86877,26 +87681,33 @@ class xDatabase {
86877
87681
  return this.convertToCharacterPlayers(results, collection);
86878
87682
  });
86879
87683
  }
86880
- loadCharacterPlayersLeaderboardWithCurrenciesAsync(key, skip, limit, gameId, characterPlayerFindOptions) {
87684
+ loadCharacterPlayersLeaderboardWithCurrenciesAsync(key, skip, limit, catalogId, gameId, characterPlayerFindOptions) {
86881
87685
  return __awaiter(this, void 0, void 0, function* () {
86882
87686
  let collection = this.systemGameCollection("CharacterPlayer", gameId);
86883
87687
  let $sort = {};
86884
87688
  $sort["playerCurrencies." + key + ".value"] = -1;
86885
- let results = yield collection.find({}, {
87689
+ let $filter = {};
87690
+ if (catalogId) {
87691
+ $filter["catalogId"] = catalogId;
87692
+ }
87693
+ let results = yield collection.find($filter, {
86886
87694
  projection: this.getFindOptions(characterPlayerFindOptions)
86887
87695
  }).sort($sort).skip(skip).limit(limit);
86888
87696
  return this.convertToCharacterPlayers(results, collection);
86889
87697
  });
86890
87698
  }
86891
- loadPositionCharacterPlayerLeaderboardWithStatisticsAsync(key, userId, gameId, initialValue, direction) {
87699
+ loadPositionCharacterPlayerLeaderboardWithStatisticsAsync(key, characterId, catalogId, gameId, initialValue, direction) {
86892
87700
  return __awaiter(this, void 0, void 0, function* () {
86893
87701
  let collection = this.systemGameCollection("CharacterPlayer", gameId);
86894
87702
  let characterPlayerFindOptions = {
86895
- playerStatistics: true
87703
+ catalogId: true,
87704
+ playerStatistics: true,
86896
87705
  };
86897
- let thisPlayer = yield this.loadCharacterPlayerAsync(userId, gameId, characterPlayerFindOptions);
87706
+ let thisPlayer = yield this.loadCharacterPlayerAsync(characterId, gameId, characterPlayerFindOptions);
86898
87707
  if (thisPlayer == null)
86899
87708
  return -1;
87709
+ if (catalogId && thisPlayer.getCatalogId() != catalogId)
87710
+ return -1;
86900
87711
  let score = initialValue;
86901
87712
  let tsLastUpdate = xDatetime_1.xDatetime.getCurrentMilliseconds();
86902
87713
  let playerStatistics = thisPlayer.getPlayerStatistics(key);
@@ -86904,14 +87715,17 @@ class xDatabase {
86904
87715
  score = playerStatistics.value;
86905
87716
  tsLastUpdate = playerStatistics.tsLastUpdate;
86906
87717
  }
86907
- let filter = {};
87718
+ let $filter = {};
87719
+ if (catalogId) {
87720
+ $filter["catalogId"] = catalogId;
87721
+ }
86908
87722
  if (direction == -1) {
86909
87723
  let condition1 = {};
86910
87724
  let condition2 = {};
86911
87725
  condition1["playerStatistics." + key + ".value"] = { $gt: score };
86912
87726
  condition2["playerStatistics." + key + ".value"] = score;
86913
87727
  condition2["playerStatistics." + key + ".tsLastUpdate"] = { $lt: tsLastUpdate };
86914
- filter.$or = [condition1, condition2];
87728
+ $filter.$or = [condition1, condition2];
86915
87729
  }
86916
87730
  else {
86917
87731
  let condition1 = {};
@@ -86919,38 +87733,41 @@ class xDatabase {
86919
87733
  condition1["playerStatistics." + key + ".value"] = { $lt: score };
86920
87734
  condition2["playerStatistics." + key + ".value"] = score;
86921
87735
  condition2["playerStatistics." + key + ".tsLastUpdate"] = { $lt: tsLastUpdate };
86922
- filter.$or = [condition1, condition2];
87736
+ $filter.$or = [condition1, condition2];
86923
87737
  }
86924
- return yield collection.countDocuments(filter);
87738
+ return yield collection.countDocuments($filter);
86925
87739
  });
86926
87740
  }
86927
- loadPositionCharacterPlayerLeaderboardWithCurrenciesAsync(key, userId, gameId) {
87741
+ loadPositionCharacterPlayerLeaderboardWithCurrenciesAsync(key, userId, catalogId, gameId) {
86928
87742
  return __awaiter(this, void 0, void 0, function* () {
86929
87743
  let collection = this.systemGameCollection("CharacterPlayer", gameId);
86930
87744
  let characterPlayerFindOptions = {
86931
- playerCurrencies: true
87745
+ playerCurrencies: true,
87746
+ catalogId: true,
86932
87747
  };
86933
87748
  let thisPlayer = yield this.loadCharacterPlayerAsync(userId, gameId, characterPlayerFindOptions);
86934
87749
  if (thisPlayer == null)
86935
87750
  return -1;
87751
+ if (catalogId && thisPlayer.getCatalogId() != catalogId)
87752
+ return -1;
86936
87753
  let score = 0;
86937
87754
  let playerCurrencies = thisPlayer.getPlayerCurrency(key);
86938
87755
  if (playerCurrencies != null) {
86939
87756
  score = playerCurrencies.value;
86940
87757
  }
86941
- let filter = {};
86942
- filter["playerCurrencies." + key] = {
87758
+ let $filter = {};
87759
+ $filter["playerCurrencies." + key] = {
86943
87760
  $gt: {
86944
87761
  value: score,
86945
87762
  }
86946
87763
  };
86947
- return yield collection.countDocuments(filter);
87764
+ return yield collection.countDocuments($filter);
86948
87765
  });
86949
87766
  }
86950
87767
  loadFriendCharacterPlayersLeaderboardWithStatisticsAsync(friendIds, gameId, characterPlayerFindOptions) {
86951
87768
  return __awaiter(this, void 0, void 0, function* () {
86952
87769
  let collection = this.systemGameCollection("CharacterPlayer", gameId);
86953
- let results = yield collection.find({ userId: { $in: friendIds } }, {
87770
+ let results = yield collection.find({ characterId: { $in: friendIds } }, {
86954
87771
  projection: this.getFindOptions(characterPlayerFindOptions)
86955
87772
  });
86956
87773
  let answer = [];
@@ -87091,23 +87908,28 @@ class xDatabase {
87091
87908
  return this.convertToGroups(results, collection);
87092
87909
  });
87093
87910
  }
87094
- loadGroupsLeaderboardWithStatisticsAsync(key, skip, limit, gameId, direction, groupFindOptions) {
87911
+ loadGroupsLeaderboardWithStatisticsAsync(key, skip, limit, catalogId, gameId, direction, groupFindOptions) {
87095
87912
  return __awaiter(this, void 0, void 0, function* () {
87096
87913
  let collection = this.systemGameCollection("Group", gameId);
87097
87914
  let $sort = {};
87098
87915
  $sort["groupStatistics." + key + ".value"] = direction;
87099
87916
  $sort["groupStatistics." + key + ".tsLastUpdate"] = 1;
87100
- let results = yield collection.find({}, {
87917
+ let $filter = {};
87918
+ if (catalogId)
87919
+ $filter["catalogId"] = catalogId;
87920
+ let results = yield collection.find($filter, {
87101
87921
  projection: this.getFindOptions(groupFindOptions)
87102
87922
  }).sort($sort).skip(skip).limit(limit);
87103
87923
  return this.convertToGroups(results, collection);
87104
87924
  });
87105
87925
  }
87106
- loadGroupsLeaderboardWithStatisticsAllAsync(key, gameId, direction, groupFindOptions) {
87926
+ loadGroupsLeaderboardWithStatisticsAllAsync(key, catalogId, gameId, direction, groupFindOptions) {
87107
87927
  return __awaiter(this, void 0, void 0, function* () {
87108
87928
  let collection = this.systemGameCollection("Group", gameId);
87109
87929
  let $filter = {};
87110
87930
  $filter["groupStatistics." + key + ".value"] = { $ne: null };
87931
+ if (catalogId)
87932
+ $filter["catalogId"] = catalogId;
87111
87933
  let $sort = {};
87112
87934
  $sort["groupStatistics." + key + ".value"] = direction;
87113
87935
  $sort["groupStatistics." + key + ".tsLastUpdate"] = 1;
@@ -87128,26 +87950,32 @@ class xDatabase {
87128
87950
  return this.convertToGroups(results, collection);
87129
87951
  });
87130
87952
  }
87131
- loadGroupsLeaderboardWithCurrenciesAsync(key, skip, limit, gameId, groupFindOptions) {
87953
+ loadGroupsLeaderboardWithCurrenciesAsync(key, skip, limit, catalogId, gameId, groupFindOptions) {
87132
87954
  return __awaiter(this, void 0, void 0, function* () {
87133
87955
  let collection = this.systemGameCollection("Group", gameId);
87134
87956
  let $sort = {};
87135
87957
  $sort["groupCurrencies." + key + ".value"] = -1;
87136
- let results = yield collection.find({}, {
87958
+ let $filter = {};
87959
+ if (catalogId)
87960
+ $filter["catalogId"] = catalogId;
87961
+ let results = yield collection.find($filter, {
87137
87962
  projection: this.getFindOptions(groupFindOptions)
87138
87963
  }).sort($sort).skip(skip).limit(limit);
87139
87964
  return this.convertToGroups(results, collection);
87140
87965
  });
87141
87966
  }
87142
- loadPositionGroupLeaderboardWithStatisticsAsync(key, groupId, gameId, initialValue, direction) {
87967
+ loadPositionGroupLeaderboardWithStatisticsAsync(key, groupId, catalogId, gameId, initialValue, direction) {
87143
87968
  return __awaiter(this, void 0, void 0, function* () {
87144
87969
  let collection = this.systemGameCollection("Group", gameId);
87145
87970
  let groupFindOptions = {
87146
- groupStatistics: true
87971
+ groupStatistics: true,
87972
+ catalogId: true,
87147
87973
  };
87148
87974
  let thisGroup = yield this.loadGroupAsync(groupId, gameId, groupFindOptions);
87149
87975
  if (thisGroup == null)
87150
87976
  return -1;
87977
+ if (catalogId && thisGroup.getCatalogId() != catalogId)
87978
+ return -1;
87151
87979
  let score = initialValue;
87152
87980
  let tsLastUpdate = xDatetime_1.xDatetime.getCurrentMilliseconds();
87153
87981
  let groupStatistics = thisGroup.getGroupStatistics(key);
@@ -87155,14 +87983,16 @@ class xDatabase {
87155
87983
  score = groupStatistics.value;
87156
87984
  tsLastUpdate = groupStatistics.tsLastUpdate;
87157
87985
  }
87158
- let filter = {};
87986
+ let $filter = {};
87987
+ if (catalogId)
87988
+ $filter["catalogId"] = catalogId;
87159
87989
  if (direction == -1) {
87160
87990
  let condition1 = {};
87161
87991
  let condition2 = {};
87162
87992
  condition1["groupStatistics." + key + ".value"] = { $gt: score };
87163
87993
  condition2["groupStatistics." + key + ".value"] = score;
87164
87994
  condition2["groupStatistics." + key + ".tsLastUpdate"] = { $lt: tsLastUpdate };
87165
- filter.$or = [condition1, condition2];
87995
+ $filter.$or = [condition1, condition2];
87166
87996
  }
87167
87997
  else {
87168
87998
  let condition1 = {};
@@ -87170,9 +88000,9 @@ class xDatabase {
87170
88000
  condition1["groupStatistics." + key + ".value"] = { $lt: score };
87171
88001
  condition2["groupStatistics." + key + ".value"] = score;
87172
88002
  condition2["groupStatistics." + key + ".tsLastUpdate"] = { $lt: tsLastUpdate };
87173
- filter.$or = [condition1, condition2];
88003
+ $filter.$or = [condition1, condition2];
87174
88004
  }
87175
- return yield collection.countDocuments(filter);
88005
+ return yield collection.countDocuments($filter);
87176
88006
  });
87177
88007
  }
87178
88008
  loadPositionGroupLeaderboardWithCurrenciesAsync(key, groupId, gameId) {
@@ -87189,13 +88019,13 @@ class xDatabase {
87189
88019
  if (groupCurrency != null) {
87190
88020
  score = groupCurrency.value;
87191
88021
  }
87192
- let filter = {};
87193
- filter["groupCurrencies." + key] = {
88022
+ let $filter = {};
88023
+ $filter["groupCurrencies." + key] = {
87194
88024
  $gt: {
87195
88025
  value: score,
87196
88026
  }
87197
88027
  };
87198
- return yield collection.countDocuments(filter);
88028
+ return yield collection.countDocuments($filter);
87199
88029
  });
87200
88030
  }
87201
88031
  loadGroupAsync(groupId, gameId, groupFindOptions) {
@@ -87255,23 +88085,27 @@ class xDatabase {
87255
88085
  return this.convertToInventories(results, collection);
87256
88086
  });
87257
88087
  }
87258
- loadInventoriesLeaderboardWithStatisticsAsync(key, skip, limit, gameId, direction, inventoryFindOptions) {
88088
+ loadInventoriesLeaderboardWithStatisticsAsync(key, skip, limit, catalogId, gameId, direction, inventoryFindOptions) {
87259
88089
  return __awaiter(this, void 0, void 0, function* () {
87260
88090
  let collection = this.systemGameCollection("Inventory", gameId);
87261
88091
  let $sort = {};
87262
88092
  $sort["itemStatistics." + key + ".value"] = direction;
87263
88093
  $sort["itemStatistics." + key + ".tsLastUpdate"] = 1;
87264
- let results = yield collection.find({}, {
88094
+ let $filter = {};
88095
+ $filter["catalogId"] = catalogId;
88096
+ let results = yield collection.find($filter, {
87265
88097
  projection: this.getFindOptions(inventoryFindOptions)
87266
88098
  }).sort($sort).skip(skip).limit(limit);
87267
88099
  return this.convertToInventories(results, collection);
87268
88100
  });
87269
88101
  }
87270
- loadInventoriesLeaderboardWithStatisticsAllAsync(key, gameId, direction, inventoryFindOptions) {
88102
+ loadInventoriesLeaderboardWithStatisticsAllAsync(key, catalogId, gameId, direction, inventoryFindOptions) {
87271
88103
  return __awaiter(this, void 0, void 0, function* () {
87272
88104
  let collection = this.systemGameCollection("Inventory", gameId);
87273
88105
  let $filter = {};
87274
88106
  $filter["itemStatistics." + key + ".value"] = { $ne: null };
88107
+ if (catalogId)
88108
+ $filter["catalogId"] = catalogId;
87275
88109
  let $sort = {};
87276
88110
  $sort["itemStatistics." + key + ".value"] = direction;
87277
88111
  $sort["itemStatistics." + key + ".tsLastUpdate"] = 1;
@@ -87292,15 +88126,18 @@ class xDatabase {
87292
88126
  return this.convertToInventories(results, collection);
87293
88127
  });
87294
88128
  }
87295
- loadPositionInventoryLeaderboardWithStatisticsAsync(key, itemId, gameId, initialValue, direction) {
88129
+ loadPositionInventoryLeaderboardWithStatisticsAsync(key, itemId, catalogId, gameId, initialValue, direction) {
87296
88130
  return __awaiter(this, void 0, void 0, function* () {
87297
88131
  let collection = this.systemGameCollection("Inventory", gameId);
87298
88132
  let inventoryFindOptions = {
87299
- itemStatistics: true
88133
+ itemStatistics: true,
88134
+ catalogId: true,
87300
88135
  };
87301
88136
  let thisInventory = yield this.loadInventoryAsync(itemId, gameId, inventoryFindOptions);
87302
88137
  if (thisInventory == null)
87303
88138
  return -1;
88139
+ if (catalogId && thisInventory.getCatalogId() != catalogId)
88140
+ return -1;
87304
88141
  let score = initialValue;
87305
88142
  let tsLastUpdate = xDatetime_1.xDatetime.getCurrentMilliseconds();
87306
88143
  let itemStatistics = thisInventory.getItemStatistics(key);
@@ -87308,14 +88145,16 @@ class xDatabase {
87308
88145
  score = itemStatistics.value;
87309
88146
  tsLastUpdate = itemStatistics.tsLastUpdate;
87310
88147
  }
87311
- let filter = {};
88148
+ let $filter = {};
88149
+ if (catalogId)
88150
+ $filter["catalogId"] = catalogId;
87312
88151
  if (direction == -1) {
87313
88152
  let condition1 = {};
87314
88153
  let condition2 = {};
87315
88154
  condition1["itemStatistics." + key + ".value"] = { $gt: score };
87316
88155
  condition2["itemStatistics." + key + ".value"] = score;
87317
88156
  condition2["itemStatistics." + key + ".tsLastUpdate"] = { $lt: tsLastUpdate };
87318
- filter.$or = [condition1, condition2];
88157
+ $filter.$or = [condition1, condition2];
87319
88158
  }
87320
88159
  else {
87321
88160
  let condition1 = {};
@@ -87323,9 +88162,9 @@ class xDatabase {
87323
88162
  condition1["itemStatistics." + key + ".value"] = { $lt: score };
87324
88163
  condition2["itemStatistics." + key + ".value"] = score;
87325
88164
  condition2["itemStatistics." + key + ".tsLastUpdate"] = { $lt: tsLastUpdate };
87326
- filter.$or = [condition1, condition2];
88165
+ $filter.$or = [condition1, condition2];
87327
88166
  }
87328
- return yield collection.countDocuments(filter);
88167
+ return yield collection.countDocuments($filter);
87329
88168
  });
87330
88169
  }
87331
88170
  loadInventoryAsync(itemId, gameId, inventoryFindOptions) {
@@ -93213,9 +94052,14 @@ class GNServer {
93213
94052
  let thiz = this;
93214
94053
  this.timerService.subscriberEverySecond(() => {
93215
94054
  let currentDate = xDatetime_1.xDatetime.getCurrentDate();
93216
- if (currentDate.getSeconds() % 5 == 0)
94055
+ if (currentDate.getSeconds() % 10 == 0)
93217
94056
  thiz.handleMatchmaking();
93218
94057
  });
94058
+ this.timerService.subscriberEveryMinute(() => {
94059
+ let currentDate = xDatetime_1.xDatetime.getCurrentDate();
94060
+ if (currentDate.getMinutes() % 10 == 0)
94061
+ thiz.xCacheData.removeInvalidData();
94062
+ });
93219
94063
  }
93220
94064
  init() {
93221
94065
  {
@@ -93608,6 +94452,7 @@ class GNServer {
93608
94452
  tempAnalyticsService.setGNServer(this);
93609
94453
  tempAnalyticsService.run();
93610
94454
  this.analyticsService = tempAnalyticsService;
94455
+ this.postEventCallbackCollection = this.xDatabase.systemCollection("EventCallback.Post");
93611
94456
  if (onRunSuccess != null)
93612
94457
  onRunSuccess();
93613
94458
  }
@@ -93721,21 +94566,83 @@ class GNServer {
93721
94566
  }
93722
94567
  sendEventTo(userId, operationEvent) {
93723
94568
  return __awaiter(this, void 0, void 0, function* () {
94569
+ var _a;
94570
+ yield this.eventCallbackCloudScriptService.executeEvent("system_SendEventTo", { userId: userId }, operationEvent);
94571
+ let operationEventToData = {
94572
+ eventCode: operationEvent.getEventCode(),
94573
+ encrypted: operationEvent.isEncrypted(),
94574
+ parameters: (_a = operationEvent.getParameters()) === null || _a === void 0 ? void 0 : _a.toData()
94575
+ };
94576
+ this.postEventCallbackCollection.insertOne({
94577
+ eventName: "system_SendEventTo",
94578
+ tsCreate: xDatetime_1.xDatetime.getCurrentMilliseconds(),
94579
+ request: {
94580
+ userId: userId
94581
+ },
94582
+ operationEvent: operationEventToData,
94583
+ responseSize: Buffer.byteLength(JSON.stringify(operationEventToData), "utf-8"),
94584
+ });
93724
94585
  return yield this.socketApp.getSocketAppHandler().sendEventTo(userId, operationEvent);
93725
94586
  });
93726
94587
  }
93727
94588
  sendEventToRoom(roomId, operationEvent) {
93728
94589
  return __awaiter(this, void 0, void 0, function* () {
94590
+ var _a;
94591
+ yield this.eventCallbackCloudScriptService.executeEvent("system_SendEventToRoom", { roomId: roomId }, operationEvent);
94592
+ let operationEventToData = {
94593
+ eventCode: operationEvent.getEventCode(),
94594
+ encrypted: operationEvent.isEncrypted(),
94595
+ parameters: (_a = operationEvent.getParameters()) === null || _a === void 0 ? void 0 : _a.toData()
94596
+ };
94597
+ this.postEventCallbackCollection.insertOne({
94598
+ eventName: "system_SendEventToRoom",
94599
+ tsCreate: xDatetime_1.xDatetime.getCurrentMilliseconds(),
94600
+ request: {
94601
+ roomId: roomId
94602
+ },
94603
+ operationEvent: operationEventToData,
94604
+ responseSize: Buffer.byteLength(JSON.stringify(operationEventToData), "utf-8"),
94605
+ });
93729
94606
  return yield this.socketApp.getSocketAppHandler().sendEventToRoom(roomId, operationEvent);
93730
94607
  });
93731
94608
  }
93732
94609
  sendEventToMoreUser(userIds, operationEvent) {
93733
94610
  return __awaiter(this, void 0, void 0, function* () {
94611
+ var _a;
94612
+ yield this.eventCallbackCloudScriptService.executeEvent("system_SendEventToMoreUser", { userIds: userIds }, operationEvent);
94613
+ let operationEventToData = {
94614
+ eventCode: operationEvent.getEventCode(),
94615
+ encrypted: operationEvent.isEncrypted(),
94616
+ parameters: (_a = operationEvent.getParameters()) === null || _a === void 0 ? void 0 : _a.toData()
94617
+ };
94618
+ this.postEventCallbackCollection.insertOne({
94619
+ eventName: "system_SendEventToMoreUser",
94620
+ tsCreate: xDatetime_1.xDatetime.getCurrentMilliseconds(),
94621
+ request: {
94622
+ userIds: userIds
94623
+ },
94624
+ operationEvent: operationEventToData,
94625
+ responseSize: Buffer.byteLength(JSON.stringify(operationEventToData), "utf-8") * userIds.length,
94626
+ });
93734
94627
  return yield this.socketApp.getSocketAppHandler().sendEventToMoreUser(userIds, operationEvent);
93735
94628
  });
93736
94629
  }
93737
94630
  sendEventToAllPlayer(operationEvent) {
93738
94631
  return __awaiter(this, void 0, void 0, function* () {
94632
+ var _a;
94633
+ yield this.eventCallbackCloudScriptService.executeEvent("system_SendEventToAllPlayer", {}, operationEvent);
94634
+ let operationEventToData = {
94635
+ eventCode: operationEvent.getEventCode(),
94636
+ encrypted: operationEvent.isEncrypted(),
94637
+ parameters: (_a = operationEvent.getParameters()) === null || _a === void 0 ? void 0 : _a.toData()
94638
+ };
94639
+ this.postEventCallbackCollection.insertOne({
94640
+ eventName: "system_SendEventToAllPlayer",
94641
+ tsCreate: xDatetime_1.xDatetime.getCurrentMilliseconds(),
94642
+ request: {},
94643
+ operationEvent: operationEventToData,
94644
+ responseSize: Buffer.byteLength(JSON.stringify(operationEventToData), "utf-8"),
94645
+ });
93739
94646
  return yield this.socketApp.getSocketAppHandler().sendEventToAllPlayer(operationEvent);
93740
94647
  });
93741
94648
  }