Parcourir la source

fix : 腾讯媒体sdk测试修改200

bilingfeng il y a 4 mois
Parent
commit
a07082416a

+ 1 - 1
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/SDKApplication.java

@@ -23,7 +23,7 @@ public class SDKApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(SDKApplication.class, args);
-        System.out.println("赞象SDK服务启动成功 <腾讯媒体sdk测试修改100> ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象SDK服务启动成功 <腾讯媒体sdk测试修改200> ( ´・・)ノ(._.`) \n" +
                 " ___________ _   __\n" +
                 "/  ___|  _  \\ | / /\n" +
                 "\\ `--.| | | | |/ / \n" +

+ 22 - 11
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/GameBackLogMediaSdkServiceImpl.java

@@ -83,19 +83,18 @@ public class GameBackLogMediaSdkServiceImpl extends ServiceImpl<GameBackLogMedia
 
     @Override
     public Map<String, Object> callBackJudge(CallBackControlParam param, UserData userData) {
-        Map<String, Object> resultMap = new HashMap<>(7);
-        resultMap.put("callBackTypeEnum", param.getCallBackTypeEnum().getValue());
-        resultMap.put("userId", userData.getUserId());
-        resultMap.put("gameId", userData.getGameId());
-        resultMap.put("callBack", Boolean.FALSE);
-        //参数判断, 检测不通过
-        if (!this.callBackParamCheck(param, resultMap)) {
-            return resultMap;
-        }
         //线程锁, 避免重复请求
         String lockKey = this.getLockKey(param, userData.getUserId());
-        if (!distributedLockComponent.doLock(lockKey, 0L, 1L, TimeUnit.MINUTES)) {
+        if (!distributedLockComponent.doLock(lockKey, 0L, 20L, TimeUnit.SECONDS)) {
             log.error("重复请求触发线程锁, 直接返回false, lockKey : {}", lockKey);
+            Map<String, Object> resultMap = this.getResultMap(param, userData);
+            resultMap.put("backMsg", "重复请求触发线程锁, 直接返回false, lockKey : " + lockKey);
+            return resultMap;
+        }
+        //判断结果返回对象
+        Map<String, Object> resultMap = this.getResultMap(param, userData);
+        //参数判断, 检测不通过
+        if (!this.callBackParamCheck(param, resultMap)) {
             return resultMap;
         }
         try {
@@ -117,12 +116,24 @@ public class GameBackLogMediaSdkServiceImpl extends ServiceImpl<GameBackLogMedia
                     JsonUtil.toString(userData), e.getMessage(), e);
             resultMap.put("backMsg", "事件回传判断, 出现异常");
         } finally {
-            distributedLockComponent.unlock(lockKey);
+            //等级提升以外的事件释放锁, 等级变化20秒以内不更新, 不回传, 因为包含了战力变化
+            if (!Objects.equals(param.getCallBackTypeEnum(), CallBackTypeEnum.CALL_BACK_UPDATE_LEVEL)) {
+                distributedLockComponent.unlock(lockKey);
+            }
         }
         //返回结果
         return resultMap;
     }
 
+    private Map<String, Object> getResultMap(CallBackControlParam param, UserData userData) {
+        Map<String, Object> resultMap = new HashMap<>(10);
+        resultMap.put("callBackTypeEnum", param.getCallBackTypeEnum().getValue());
+        resultMap.put("userId", userData.getUserId());
+        resultMap.put("gameId", userData.getGameId());
+        resultMap.put("callBack", Boolean.FALSE);
+        return resultMap;
+    }
+
     private String getLockKey(CallBackControlParam param, Long userId) {
         //回传枚举
         CallBackTypeEnum callBackTypeEnum = param.getCallBackTypeEnum();