|
@@ -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;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
}
|