xushiting 3 lat temu
rodzic
commit
d0a6492a16

+ 9 - 4
src/main/java/com/fdkk/fdkkmeta/grpcService/sceneGrpcServer.java

@@ -164,8 +164,12 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 			myState.put("playerAngle",player_angle);
 			//redis中写入用户状态信息
 			//redisCache.setCacheObject("UserState:"+userEntity.getUserId(),myState);
-			MapCacheUtil.userCache.put(userEntity.getUserId(),myState);
 
+			ActionPO initRequestPO = new ActionPO();
+			initRequestPO.setAction_type(0);
+			initRequestPO.setUser_id(user_id);
+			MapCacheUtil.appendCacheList(user_id,initRequestPO);
+			MapCacheUtil.userCache.put(user_id,myState);
 			MetaDataFramePO metaDataFramePO = createDefaultFrameMetadata(userEntity);
 			//返回
 			CommonReply.Builder builder = CommonReply.newBuilder();
@@ -216,7 +220,7 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 			rotateRequestPO.setRotationAction(jsonObject);
 			//redisPublishService.sendJsonMessage(RedisQueueConstant.SET_CACHE_REQUEST_QUEUE,rotateRequestPO);
 			//redisCache.setCacheList("setCacheRequest:"+user_id, Arrays.asList(rotateRequestPO));
-			MapCacheUtil.appendCacheList("user_id",rotateRequestPO);
+			MapCacheUtil.appendCacheList(user_id,rotateRequestPO);
 			NormalReply.Builder builder = NormalReply.newBuilder();
 			builder.setCode(200);
 			responseObserver.onNext(builder.build());
@@ -324,7 +328,7 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 
 			moveRequestPO.setClicking_state(json_clicking_state);
 
-			MapCacheUtil.appendCacheList("user_id",moveRequestPO);
+			MapCacheUtil.appendCacheList(user_id,moveRequestPO);
 			/*
 			//UserEntity user = userService.findUserId(user_id);
 			//String appId = user.getAppId();
@@ -466,7 +470,7 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 			//joystickPO.setDirAction(dirAction);
 			//redisPublishService.sendJsonMessage(RedisQueueConstant.SET_CACHE_REQUEST_QUEUE,joystickPO);
 			//redisCache.setCacheList("setCacheRequest:"+user_id, Arrays.asList(joystickPO));
-			MapCacheUtil.appendCacheList("user_id",joystickPO);
+			MapCacheUtil.appendCacheList(user_id,joystickPO);
 			/*
 			//速度不够,只是让人旋转
 			if(dirAction.getSpeedLevel()>7){
@@ -578,4 +582,5 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 		return metaDataFramePO;
 		//redisCache.setCacheObject("updateFrameMetadata:"+user.getUserId(),metaDataFramePO);
 	}
+
 }

+ 77 - 17
src/main/java/com/fdkk/fdkkmeta/task/UpdateFrameMetaTask.java

@@ -1,5 +1,6 @@
 package com.fdkk.fdkkmeta.task;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -19,6 +20,7 @@ import com.fdkk.fdkkmeta.service.RotateFrameService;
 import com.fdkk.fdkkmeta.util.MapCacheUtil;
 import com.fdkk.fdkkmeta.util.ProtoJsonUtils;
 import com.fdkk.fdkkmeta.util.kesar.GetRoute;
+import com.google.protobuf.ProtocolStringList;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
@@ -68,7 +70,7 @@ public class UpdateFrameMetaTask {
 //       );
         MapCacheUtil.ActionCache.keySet().parallelStream().forEach(
                 userId -> {
-                        log.info("Key ={} " ,userId);
+                        log.info("定时操作:Key ={} " ,userId);
                         List<ActionPO> list = MapCacheUtil.ActionCache.get(userId);
                         handle( userId,list);
                }
@@ -76,20 +78,20 @@ public class UpdateFrameMetaTask {
    }
    private void handle(String userId,List<ActionPO> list){
         try {
-            if(list.size() == 0){
-                //写入一个默认数据到redis里
-                createDefaultFrameMetadata( userId);
-                return;
-            }
-
             JSONObject userInfo = MapCacheUtil.userCache.get(userId);
             ActionPO actionPO = list.get(0);
             int firstActionType = actionPO.getAction_type();
+            if(firstActionType == 0){
+                createDefaultFrameMetadata( userId);
+                MapCacheUtil.removeCache(userId,0,1);
+                return;
+            }
             if(firstActionType == 1){
                 handleMove(userInfo,actionPO);
                 return;
             }
             else if(firstActionType == 1014){
+                log.info("执行旋转操作:Key ={} " ,userId);
                 handleRotate(userInfo,list);
                 //添加删除
             }
@@ -111,8 +113,6 @@ public class UpdateFrameMetaTask {
              //才开始执行
             if(flag){
                 list.remove(0);
-                //需要删除后更新
-                /********************************************************************/
                 return;
             }
             //没有新的请求
@@ -168,6 +168,7 @@ public class UpdateFrameMetaTask {
             else if(path.size()<2){
                 userInfo.put("moveIndex",0);
                 //过渡完毕,需要删除记录并更新userInfo
+                list.remove(0);
                 /********************************************************************/
                 return;
             }
@@ -203,12 +204,12 @@ public class UpdateFrameMetaTask {
                     RotateFrameEntity _rotateFrameEntity = rotateFrameService.findByAppIdAndBreakPointIdAndFrameIndex(userInfo.getString("appId"),endBreakPointId,cameraAngle.getYaw());
                     userInfo.put("frameId",_rotateFrameEntity.getId());
                     userInfo.put("moveIndex",0);
-
                 }
                 else{
                     MoveFrameEntity _moveFrameEntity = moveFrameService.findByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngleAndFrameIndex(userInfo.getString("appId"), startBreakPointId, endBreakPointId,cameraAngle.getYaw()%45,moveIndex);
                     userInfo.put("frameId",_moveFrameEntity.getId());
                     userInfo.put("moveIndex",moveIndex);
+                    setMove( userInfo,actionPO, _moveFrameEntity);
                 }
                 //需要返回updateFrame数据并更新userInfo
                 /**********************************************************/
@@ -221,6 +222,7 @@ public class UpdateFrameMetaTask {
         RotateFrameEntity rotateFrameEntity = rotateFrameService.findById(frameId);
         int offFrameIndex = 0;
         double horizontal_move = userInfo.getDouble("horizontalMove");
+        boolean clearFlag = true;
         for(int i=0;i<actionPOList.size();++i){
             ActionPO actionPO = actionPOList.get(i);
             horizontal_move += actionPO.getRotationAction().getDouble("horizontal_move");
@@ -230,13 +232,19 @@ public class UpdateFrameMetaTask {
                 continue;
             }
             else{
-                //删除记录并更新
+                //删除记录
                 /******************************************************************************/
+                MapCacheUtil.removeCache(user_id,0,i);
                 userInfo.put("horizontalMove",0);
+                clearFlag = false;
                 break;
             }
         }
 
+        if(clearFlag){
+            MapCacheUtil.removeCache(user_id,0,actionPOList.size()-1);
+        }
+
         int currentFrame = rotateFrameEntity.getFrameIndex();      //从数据库里读取
         currentFrame +=offFrameIndex;
         if(currentFrame<0){
@@ -284,6 +292,7 @@ public class UpdateFrameMetaTask {
         //删除记录并更新,合并
         userInfo.put("frameId",rotateFrameEntity.getId());
         /******************************************************************************/
+        mergeFrame( user_id, builder.build());
     }
     private void handleJoystick(JSONObject userInfo,ActionPO actionPO){
         String user_id = userInfo.getString("userId");
@@ -435,6 +444,7 @@ public class UpdateFrameMetaTask {
             userInfo.put("rotateFrameIds",rotateFrameIds);
             //更新userInfo
             /*********************************************/
+            mergeFrame( user_id, builder.build());
         }
         //已经纠正好了
         else{
@@ -460,6 +470,48 @@ public class UpdateFrameMetaTask {
         }
     }
 
+
+    public void setMove(JSONObject userInfo,ActionPO actionPO,MoveFrameEntity moveFrameEntity){
+        String user_id = userInfo.getString("userId");
+        long frameId = userInfo.getLong("frameId");
+        String[] traceIds = new String[1];
+        traceIds[0] = actionPO.getTrace_id();
+
+        JSONArray actionResponses = new JSONArray();
+        JSONObject actionResponse = sceneGrpcService.createActionResponse(actionPO.getAction_type(),actionPO.getTrace_id());
+        actionResponses.add(actionResponse);
+
+        JSONObject playerPosition = userInfo.getJSONObject("playerPosition");
+        JSONObject playerAngle = userInfo.getJSONObject("playerAngle");
+
+        Point playerPt = Point.newBuilder().setX(playerPosition.getString("x")).setY(playerPosition.getString("y")).setZ(playerPosition.getString("z")).build();
+        AngleUe4 playerAg = AngleUe4.newBuilder().setPitch(playerAngle.getIntValue("pitch")).setYaw(playerAngle.getIntValue("yaw")).setRoll(playerAngle.getIntValue("roll")).build();
+        Space player = sceneGrpcService.createSpace(playerPt,playerAg);
+
+        MetaDataFrameReply.Builder builder = MetaDataFrameReply.newBuilder();
+        for(int i=0;i<traceIds.length;++i){
+            builder.addTraceIds(traceIds[i]);
+        }
+
+        PointPO cameraPoint = moveFrameEntity.getCameraPosition();
+        Point cameraPosition = sceneGrpcService.createPoint(String.valueOf(cameraPoint.getX()),String.valueOf(cameraPoint.getY()),String.valueOf(cameraPoint.getZ()));
+
+        AnglePO cameraAnglePO = moveFrameEntity.getCameraAngle();
+        AngleUe4 cameraAngle = sceneGrpcService.createAngle(cameraAnglePO.getPitch(),cameraAnglePO.getYaw(),cameraAnglePO.getRoll());
+        Space camera = sceneGrpcService.createSpace(cameraPosition,cameraAngle);
+
+        State playerState = sceneGrpcService.createPlayerState2(player,camera,playerPt);
+
+        RenderInfo renderInfo = sceneGrpcService.createRenderInfo();
+        UserState userState = sceneGrpcService.createUserState( user_id, playerState, renderInfo, null);
+        builder.addNewUserStates(userState);
+        builder.setGetStateType(0);
+        builder.setCode(200);
+        builder.setMsg("ok");
+        String mediaSrc = metaConfig.getVideoFramePath()+"/"+"0000000001"+"/"+userInfo.getLong("breakPointId")+"/"+moveFrameEntity.getDirectory()+"/"+moveFrameEntity.getFileName()+"?m="+System.currentTimeMillis();
+        builder.setMediaSrc(mediaSrc);
+        mergeFrame( user_id, builder.build());
+    }
 //    private void handle(UserEntity user,List<ActionPO> list){
 //        try {
 //            if(list.size() == 0){
@@ -656,10 +708,11 @@ public class UpdateFrameMetaTask {
 
         String mediaSrc = metaConfig.getVideoFramePath()+"/"+"0000000001"+"/"+rotateFrameEntity.getBreakPointId()+"/"+rotateFrameEntity.getDirectory()+"/"+rotateFrameEntity.getFileName()+"?m="+System.currentTimeMillis();
         builder.setMediaSrc(mediaSrc);
-
-        redisCache.lLeftPush("updateFrameMetadata:"+userId, ProtoJsonUtils.toJson(builder));
+        redisCache.setCacheObject("updateFrameMetadata:"+userId,ProtoJsonUtils.toJson(builder));
+        //redisCache.lLeftPush("updateFrameMetadata:"+userId, ProtoJsonUtils.toJson(builder));
     }
 
+    /*
     private void createMoveFrameMetadata(String user_id,AnglePO playerAngle,PointPO playerPosition,MoveFrameEntity moveFrameEntity,String traceId) throws IOException {
         String[] traceIds = new String[1];
         traceIds[0] = traceId;
@@ -701,11 +754,18 @@ public class UpdateFrameMetaTask {
         builder.setMediaSrc(mediaSrc);
         redisCache.lLeftPush("updateFrameMetadata:"+user_id,ProtoJsonUtils.toJson(builder));
     }
-
+*/
     private void mergeFrame(String user_id,MetaDataFrameReply metaDataFrameReply){
-        MetaDataFrameReply  dataFrameReply=redisCache.getCacheObject("updateFrameMetadata:"+user_id);
-
-        redisCache.setCacheObject("updateFrameMetadata:"+user_id, dataFrameReply);
+        if (redisCache.hasKey("updateFrameMetadata:"+user_id)){
+            String dataFrameJsonStr=redisCache.getCacheObject("updateFrameMetadata:"+user_id);
+            MetaDataFrameReply.Builder dataFrameReply = MetaDataFrameReply.newBuilder();
+            ProtoJsonUtils.toProtoBean(dataFrameReply,dataFrameJsonStr);
+            if (ObjectUtil.isNotNull(dataFrameReply)){
+                metaDataFrameReply.toBuilder().addAllTraceIds(dataFrameReply.getTraceIdsList());
+                metaDataFrameReply.toBuilder().addAllActionResponses(dataFrameReply.getActionResponsesList());
+            }
+        }
+        redisCache.setCacheObject("updateFrameMetadata:"+user_id,ProtoJsonUtils.toJson(metaDataFrameReply));
     }
 
     /*