xiewenjie il y a 3 ans
Parent
commit
d401717232

+ 1 - 0
src/main/java/com/fdkk/fdkkmeta/config/MetaConfig.java

@@ -11,5 +11,6 @@ public class MetaConfig {
 
     private String freespacePath;
 
+    private String videoFramePath;
 
 }

+ 0 - 1
src/main/java/com/fdkk/fdkkmeta/domain/entity/mysql/MoveFrameEntity.java

@@ -30,7 +30,6 @@ public class MoveFrameEntity extends BaseEntity {
     @TableField(value = "camera_angle", typeHandler = JacksonTypeHandler.class)
     private AnglePO cameraAngle;
 
-    @TableField(value = "angle", typeHandler = JacksonTypeHandler.class)
     private Integer angle;
 
     private String appId;

+ 6 - 1
src/main/java/com/fdkk/fdkkmeta/domain/entity/mysql/UserEntity.java

@@ -1,7 +1,10 @@
 package com.fdkk.fdkkmeta.domain.entity.mysql;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import com.fdkk.fdkkmeta.base.BaseEntity;
+import com.fdkk.fdkkmeta.domain.po.AnglePO;
 import lombok.Data;
 
 /**
@@ -19,6 +22,8 @@ public class UserEntity extends BaseEntity {
     private String frameId;
     private String breakPointId;
     private String offlineTime;
-    private String playerAngle;
+    @TableField(value = "player_angle", typeHandler = JacksonTypeHandler.class)
+    private AnglePO playerAngle;
+
     private String sessionId;
 }

+ 100 - 38
src/main/java/com/fdkk/fdkkmeta/grpcService/sceneGrpcServer.java

@@ -6,8 +6,16 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.fdkk.fdkkmeta.config.MetaConfig;
 import com.fdkk.fdkkmeta.domain.dto.RouteDto;
+import com.fdkk.fdkkmeta.domain.entity.mysql.BreakpointsEntity;
+import com.fdkk.fdkkmeta.domain.entity.mysql.RotateFrameEntity;
+import com.fdkk.fdkkmeta.domain.entity.mysql.UserEntity;
 import com.fdkk.fdkkmeta.domain.po.PointPO;
 import com.fdkk.fdkkmeta.grpc.*;
+import com.fdkk.fdkkmeta.redis.RedisCache;
+import com.fdkk.fdkkmeta.service.BreakpointsService;
+import com.fdkk.fdkkmeta.service.MoveFrameService;
+import com.fdkk.fdkkmeta.service.RotateFrameService;
+import com.fdkk.fdkkmeta.service.UserService;
 import com.fdkk.fdkkmeta.util.ProtoJsonUtils;
 import com.fdkk.fdkkmeta.util.kesar.GetRoute;
 import com.google.protobuf.Message;
@@ -20,6 +28,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 
 import java.io.File;
 import java.io.IOException;
+import java.util.List;
 
 /**
  * @author Xiewj
@@ -30,6 +39,22 @@ import java.io.IOException;
 public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBase {
     @Autowired
     MetaConfig metaConfig;
+
+    @Autowired
+    UserService userService;
+
+    @Autowired
+    BreakpointsService breakpointsService;
+    @Autowired
+    RotateFrameService rotateFrameService;
+
+    @Autowired
+    MoveFrameService moveFrameService;
+
+    @Autowired
+    RedisCache redisCache;
+
+
     /***
      *     回复 案例
      *    SceneReply res = SceneReply.newBuilder().setRes(id+","+name).build();
@@ -90,12 +115,14 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
     		String avatar_id = request.getAvatarId();
     		String room_id = request.getRoomId();
     		String app_id = request.getAppId();
-    		
+            //保存user
+            UserEntity userEntity=new UserEntity();
+            userService.save(userEntity);
     		//初始化的时候可以写死
     		//frame_id
     		//break_point_id
     		//player_angle
-    		
+
     		//再写入user表
     	}
     	catch(Exception e) {
@@ -119,34 +146,41 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
     		}
     		*/
     		int action_type = request.getActionType();
-    		
+
     		//request.getRotationAction()
-    		
+
     		String trace_id = request.getTraceId();
     		String user_id = request.getUserId();
-    		
+
     		//这三个变量从user表和rotateframe表里取
-    		Space player = null;
+            UserEntity user = userService.findById(user_id);
+            BreakpointsEntity breakpointsEntity = breakpointsService.findById(user.getBreakPointId());
+            RotateFrameEntity rotateFrameEntity = rotateFrameService.findById(user.getFrameId());
+
+            Space player = null;
     		Space camera = null;
     		Point cameraCenter = null;
-    		
+
     		State playerState = createPlayerState( player, camera, cameraCenter);
     		RenderInfo renderInfo = createRenderInfo();
     		Event event = createEvent();
     		UserState userState = createUserState( user_id, playerState, renderInfo, event);
-    		
+
+
+            /// metaConfig.getVideoFramePath()
+           log.info("VideoFramePath{}", metaConfig.getVideoFramePath());
     		NormalReply res = NormalReply.newBuilder()
     				.setTraceIds(0, trace_id)
     				.setVehicle(null)
     				.setNewUserStates(0, userState)
     				.setActionResponses(0, 0)              //这个要查查
-    				.setGetStateType(0) 
+    				.setGetStateType(0)
     				.setCode(0)
     				.setMsg("OK")
     				.setFrameSrc(null)                     //从数据库中获取对应的路径
     				.build();
-    		
-    		
+
+
 	        responseObserver.onNext(res);
 	        responseObserver.onCompleted();
     	}
@@ -165,39 +199,64 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
         	 * 2.根据breakPoint_id,从breakpoints表里获得对应的起始坐标
         	 * 3.根据request中的clicking_action里的clicking_point(目的地)以及当前起始坐标计算出路径
         	 * 4.返回整个路径的一段
-        	 * 
+        	 *
         	 * */
      		int action_type= request.getActionType();
      		ClickingAction clicking_action = request.getClickingAction();
-     		
+
      		Point end = clicking_action.getClickingPoint();
-     		
+
      		State clicking_state = request.getClickingState();
      		String trace_id = request.getTraceId();
      		String user_id = request.getUserId();
-     		
-     		Point start = null;    //从user表里取
+
+            UserEntity userEntity = userService.findById(user_id);
+            BreakpointsEntity breakpointsEntity = breakpointsService.findById(userEntity.getBreakPointId());
+
+            Point start = null;    //从user表里取
      		//计算路径
+
+            String appId = userEntity.getAppId();
+            RouteDto po=new RouteDto();
+            PointPO s=new PointPO();
+            s.setX(Double.parseDouble(start.getX()));
+            s.setY(Double.parseDouble(start.getY()));
+            s.setZ(Double.parseDouble(start.getY()));
+            PointPO e=new PointPO();
+            e.setX(Double.parseDouble(end.getX()));
+            e.setY(Double.parseDouble(end.getY()));
+            e.setZ(Double.parseDouble(end.getY()));
+            po.setE_location(e);
+            po.setS_location(s);
+            po.setSceneCode(appId);
+            JSONArray maps = GetRoute.getRoute(metaConfig.getFreespacePath()+ File.separator +appId+"_target_freespace.json", po);
+            //处理路径数组,处理完成后放入缓存
+
+
+            redisCache.setCacheObject(trace_id,maps);
+
+
+
      		//开始返回结果,一段一段的返回(每段是两个邻居点的过渡),第一段之前还要有角度的矫正
      		//矫正的结果:
-     		
-     		
+            //moveFrameService.findById()
+
      		//这三个变量从user表和rotateframe表里取。自己对应的都是空
     		Space player = null;
     		Space camera = null;
     		Point cameraCenter = null;
-    		
+
     		State playerState = createPlayerState( player, camera, cameraCenter);
     		RenderInfo renderInfo = createRenderInfo();
     		Event event = createEvent();
     		UserState userState = createUserState( user_id, playerState, renderInfo, event);
-    		
+
     		MoveReply res = MoveReply.newBuilder()
     				.setTraceIds(0, trace_id)
     				.setVehicle(null)
     				.setNewUserStates(0, userState)
     				.setActionResponses(0, 0)              //这个要查查
-    				.setGetStateType(0) 
+    				.setGetStateType(0)
     				.setCode(0)
     				.setMsg("OK")
     				//.setPlayer(index, value)
@@ -220,19 +279,19 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
         	 * 2.根据breakPoint_id,从breakpoints表里获得对应的起始坐标
         	 * 3.根据request中的clicking_action里的clicking_point(目的地)以及当前起始坐标计算出路径
         	 * 4.返回整个路径的一段
-        	 * 
+        	 *
         	 * */
      		String user_id = request.getUserId();
      		String trace_id = request.getTraceId();
      		boolean needNext = request.getNext();
-     		
+
      		//moveStart的结果参考moveStart
     	}
     	catch(Exception e) {
     		e.printStackTrace();
     	}
     }
-    
+
     @Override
     public void getBreakPoint(BreakPointRequest request, StreamObserver<BreakPointReply> responseObserver)   {
      	try {
@@ -242,17 +301,20 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
             NeighborPointsAction get_neighbor_points_action = request.getGetNeighborPointsAction();
      		String trace_id = request.getTraceId();
      		String user_id = request.getUserId();
-     		
+
      		//从表breakpoints里获取所有的呼吸点,并且是数组
-     		Point[] nps=null;
-     		
-     		BreakPointReply res = BreakPointReply.newBuilder()
+            //TODO 根据查询所有
+            UserEntity userEntity = userService.findById(user_id);
+            List<BreakpointsEntity> allList = breakpointsService.findByAppId(userEntity.getAppId());
+
+            Point[] nps=null;
+            BreakPointReply res = BreakPointReply.newBuilder()
      				.setActionType(action_type)
      				.setPointType(100)
      				.setExtra("")
      				.setTraceId(trace_id)
      				.setPacketId("")
-     				//.setNps(nps)                   
+     				//.setNps(nps)
      				.setPeopleNum(0)
      				.setZoneId("")
      				.setEchoMsg("")
@@ -285,7 +347,7 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
     		e.printStackTrace();
     	}
     }
-    
+
     private UserState createUserState(String user_id,State state,RenderInfo renderInfo,Event event) {
     	UserState userState = UserState.newBuilder()
 				.setUserId(user_id)
@@ -296,7 +358,7 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
 				.build();
     	return userState;
     }
-    
+
     private State createPlayerState(Space player,Space camera,Point cameraCenter) {
     	State playerState = State.newBuilder()
     			.setRoomTypeId("")
@@ -322,7 +384,7 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
     			.setCameraCenter(cameraCenter).build();
     	return playerState;
     }
-    
+
     private RenderInfo createRenderInfo() {
     	RenderInfo renderInfo = RenderInfo.newBuilder()
     			.setRenderType(0)
@@ -339,26 +401,26 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
     			.setNoMedia(false).build();
     	return renderInfo;
     }
-    
+
     private Event createEvent() {
     	Event event = Event.newBuilder().setId("").setType(0).setRotateEvent(null).setRemoveVisitorEvent(null).build();
     	return event;
     }
-    
+
     private Space createSpace(Point position,AngleUe4 angle) {
     	Space space = Space.newBuilder().setPosition(position).setAngle(angle).build();
     	return space;
     }
-    
+
     private Point createPoint(String x,String y,String z) {
     	Point point = Point.newBuilder().setX(x).setY(y).setZ(z).build();
     	return point;
     }
-    
+
     private AngleUe4 createAngle(int pitch,int yaw,int roll) {
     	AngleUe4 angle = AngleUe4.newBuilder().setPitch(pitch).setYaw(yaw).setRoll(roll).build();
     	return angle;
     }
-    
-    
+
+
 }

+ 1 - 0
src/main/java/com/fdkk/fdkkmeta/service/MoveFrameService.java

@@ -10,4 +10,5 @@ import java.util.List;
  */
 public interface MoveFrameService extends IBaseService<MoveFrameEntity> {
     List<MoveFrameEntity> findByAppId(String AppId);
+    MoveFrameEntity findByAppIAndStartBreakPointIdAndEndBreakPointIdAndangle(String appId,Integer startBreakPointId,Integer endBreakPointId,Integer angle);
 }

+ 4 - 0
src/main/java/com/fdkk/fdkkmeta/service/RotateFrameService.java

@@ -13,4 +13,8 @@ import java.util.List;
 public interface RotateFrameService extends IBaseService<RotateFrameEntity> {
     List<RotateFrameEntity> findByAppId(String AppId);
     JSONObject getInitFrameInfo(String app_id);
+
+    RotateFrameEntity findByAppIdAndBreakPointIdAndFrameIndex(String appid,String breakPointId,String sframeIndex,String eframeIndex);
+
+
 }

+ 12 - 0
src/main/java/com/fdkk/fdkkmeta/service/impl/MoveFrameServiceImpl.java

@@ -24,4 +24,16 @@ public class MoveFrameServiceImpl extends BaseServiceImpl<MoveFramesMapper, Move
         wrapper.eq(MoveFrameEntity::getAppId, AppId);
         return list(wrapper);
     }
+
+    @Override
+    public MoveFrameEntity findByAppIAndStartBreakPointIdAndEndBreakPointIdAndangle(String appId, Integer startBreakPointId, Integer endBreakPointId, Integer angle) {
+        LambdaQueryWrapper<MoveFrameEntity> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(MoveFrameEntity::getAppId, appId);
+        wrapper.eq(MoveFrameEntity::getStartBreakPointId, startBreakPointId);
+        wrapper.eq(MoveFrameEntity::getEndBreakPointId, endBreakPointId);
+        wrapper.eq(MoveFrameEntity::getAngle, angle);
+        return getOne(wrapper);
+    }
+
+
 }

+ 9 - 1
src/main/java/com/fdkk/fdkkmeta/service/impl/RotateFrameImpl.java

@@ -25,10 +25,18 @@ public class RotateFrameImpl extends BaseServiceImpl<RotateFrameMapper, RotateFr
         wrapper.eq(RotateFrameEntity::getAppId, AppId);
         return list(wrapper);
     }
-    
+
     public JSONObject getInitFrameInfo(String app_id) {
     	//取app_id对应的frame,且breakPointId和frameIndex都是0
     	return new JSONObject();
     }
 
+    @Override
+    public RotateFrameEntity findByAppIdAndBreakPointIdAndFrameIndex(String appid, String breakPointId, String sframeIndex, String eframeIndex) {
+        LambdaQueryWrapper<RotateFrameEntity> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(RotateFrameEntity::getAppId, appid);
+        wrapper.eq(RotateFrameEntity::getBreakPointId, breakPointId);
+        wrapper.between(RotateFrameEntity::getFrameIndex,sframeIndex,eframeIndex);
+        return getOne(wrapper);
+    }
 }

+ 1 - 0
src/main/resources/application-dev.yml

@@ -11,6 +11,7 @@ socketio:
   workCount: 100
 fdkk:
   freespacePath: H:\workfile
+  videoFramePath: /mnt/oss/metaverse/scene
 server:
   port: 9010
   servlet: