|
@@ -40,26 +40,21 @@ import java.util.List;
|
|
public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBase {
|
|
public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBase {
|
|
@Autowired
|
|
@Autowired
|
|
MetaConfig metaConfig;
|
|
MetaConfig metaConfig;
|
|
-
|
|
|
|
@Autowired
|
|
@Autowired
|
|
UserService userService;
|
|
UserService userService;
|
|
-
|
|
|
|
@Autowired
|
|
@Autowired
|
|
BreakpointsService breakpointsService;
|
|
BreakpointsService breakpointsService;
|
|
@Autowired
|
|
@Autowired
|
|
RotateFrameService rotateFrameService;
|
|
RotateFrameService rotateFrameService;
|
|
-
|
|
|
|
@Autowired
|
|
@Autowired
|
|
MoveFrameService moveFrameService;
|
|
MoveFrameService moveFrameService;
|
|
-
|
|
|
|
@Autowired
|
|
@Autowired
|
|
RedisCache redisCache;
|
|
RedisCache redisCache;
|
|
-
|
|
|
|
@Autowired
|
|
@Autowired
|
|
SceneGrpcService sceneGrpcService;
|
|
SceneGrpcService sceneGrpcService;
|
|
-
|
|
|
|
@Autowired
|
|
@Autowired
|
|
private RedisPublishService redisPublishService;
|
|
private RedisPublishService redisPublishService;
|
|
|
|
+
|
|
/***
|
|
/***
|
|
* 回复 案例
|
|
* 回复 案例
|
|
* SceneReply res = SceneReply.newBuilder().setRes(id+","+name).build();
|
|
* SceneReply res = SceneReply.newBuilder().setRes(id+","+name).build();
|
|
@@ -163,6 +158,7 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
|
|
myState.put("frameId",firstFrameId);
|
|
myState.put("frameId",firstFrameId);
|
|
myState.put("breakPointId",firstBreakPointId);
|
|
myState.put("breakPointId",firstBreakPointId);
|
|
myState.put("appId",app_id);
|
|
myState.put("appId",app_id);
|
|
|
|
+ myState.put("userId",user_id);
|
|
//redis中写入用户状态信息
|
|
//redis中写入用户状态信息
|
|
redisCache.setCacheObject("UserState:"+userEntity.getUserId(),myState);
|
|
redisCache.setCacheObject("UserState:"+userEntity.getUserId(),myState);
|
|
|
|
|
|
@@ -204,58 +200,6 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
|
|
|
|
|
|
redisPublishService.sendProtocolMessage(RedisQueueConstant.ROTATE_QUEUE,request.toBuilder());
|
|
redisPublishService.sendProtocolMessage(RedisQueueConstant.ROTATE_QUEUE,request.toBuilder());
|
|
|
|
|
|
-
|
|
|
|
- ActionPO rotateRequestPO = new ActionPO();
|
|
|
|
-
|
|
|
|
- int action_type = request.getActionType();
|
|
|
|
- String trace_id = request.getTraceId();
|
|
|
|
- String user_id = request.getUserId();
|
|
|
|
- RotationAction rotationAction = request.getRotationAction();
|
|
|
|
-
|
|
|
|
- JSONObject myState = redisCache.getCacheObject("UserState:"+user_id);
|
|
|
|
- //UserEntity user = userService.findUserId(user_id);
|
|
|
|
- RotateFrameEntity rotateFrameEntity = rotateFrameService.findById(myState.getLong("frameId"));
|
|
|
|
-
|
|
|
|
- rotateRequestPO.setAction_type(action_type);
|
|
|
|
- rotateRequestPO.setTrace_id(trace_id);
|
|
|
|
- rotateRequestPO.setUser_id(user_id);
|
|
|
|
-
|
|
|
|
- double horizontalMove = myState.getDouble("horizontalMove");
|
|
|
|
- horizontalMove += rotationAction.getHorizontalMove();
|
|
|
|
- double hAngle = horizontalMove * 90;
|
|
|
|
- log.info("旋转的角度:"+hAngle+",旋转距离:"+rotationAction.getHorizontalMove()+",积累的距离:"+horizontalMove);
|
|
|
|
- int offFrameIndex = (int)Math.ceil(hAngle);
|
|
|
|
- if(Math.abs(offFrameIndex)<1){
|
|
|
|
- myState.put("horizontalMove",horizontalMove);
|
|
|
|
- //redis中写入用户状态信息
|
|
|
|
- redisCache.setCacheObject("UserState:"+user_id,myState);
|
|
|
|
- log.info("没有旋转,更新了redis的UserState表");
|
|
|
|
- NormalReply.Builder builder = NormalReply.newBuilder();
|
|
|
|
- builder.setCode(200);
|
|
|
|
- responseObserver.onNext(builder.build());
|
|
|
|
- responseObserver.onCompleted();
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- else{
|
|
|
|
- myState.put("horizontalMove",0);
|
|
|
|
- }
|
|
|
|
- int currentFrame = rotateFrameEntity.getFrameIndex(); //从数据库里读取
|
|
|
|
- currentFrame +=offFrameIndex;
|
|
|
|
- if(currentFrame<0){
|
|
|
|
- currentFrame+=360;
|
|
|
|
- }
|
|
|
|
- else{
|
|
|
|
- currentFrame = currentFrame % 359;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- rotateFrameEntity = rotateFrameService.findByAppIdAndBreakPointIdAndFrameIndex(myState.getString("appId"),myState.getLong("breakPointId"),currentFrame);
|
|
|
|
- rotateRequestPO.setFrameId(rotateFrameEntity.getId());
|
|
|
|
- log.info("存储请求:"+rotateFrameEntity.getId());
|
|
|
|
- //每次存一帧
|
|
|
|
- redisCache.setCacheList("setCacheRequest:"+user_id, Arrays.asList(rotateRequestPO));
|
|
|
|
- //redis中写入用户状态信息
|
|
|
|
- myState.put("frameId",rotateFrameEntity.getId());
|
|
|
|
- redisCache.setCacheObject("UserState:"+user_id,myState);
|
|
|
|
NormalReply.Builder builder = NormalReply.newBuilder();
|
|
NormalReply.Builder builder = NormalReply.newBuilder();
|
|
builder.setCode(200);
|
|
builder.setCode(200);
|
|
responseObserver.onNext(builder.build());
|
|
responseObserver.onNext(builder.build());
|
|
@@ -299,6 +243,7 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
|
|
log.error("echoException{}",e.getMessage());
|
|
log.error("echoException{}",e.getMessage());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ /*
|
|
@Override
|
|
@Override
|
|
public void usersState(GetNewUserStateRequest request, StreamObserver<GetNewUserStateReply> responseObserver){
|
|
public void usersState(GetNewUserStateRequest request, StreamObserver<GetNewUserStateReply> responseObserver){
|
|
|
|
|
|
@@ -378,6 +323,8 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
|
|
log.error("usersStateException{}",e.getMessage());
|
|
log.error("usersStateException{}",e.getMessage());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ */
|
|
@Override
|
|
@Override
|
|
public void move(MoveRequest request, StreamObserver<NormalReply> responseObserver){
|
|
public void move(MoveRequest request, StreamObserver<NormalReply> responseObserver){
|
|
try{
|
|
try{
|
|
@@ -415,7 +362,8 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
|
|
if(i == 1){
|
|
if(i == 1){
|
|
AnglePO cameraAnglePO = rotateFrameEntity.getCameraAngle();
|
|
AnglePO cameraAnglePO = rotateFrameEntity.getCameraAngle();
|
|
//旋转矫正:不仅存入redis,而且返回矫正后的角度
|
|
//旋转矫正:不仅存入redis,而且返回矫正后的角度
|
|
- cameraAnglePO = setRotateForMove( user, trace_id, cameraAnglePO);
|
|
|
|
|
|
+ JSONObject myState = redisCache.getCacheObject("UserState:"+user_id);
|
|
|
|
+ cameraAnglePO = sceneGrpcService.setRotateForMove( myState, trace_id, cameraAnglePO);
|
|
movePO.setCameraAngle(cameraAnglePO);
|
|
movePO.setCameraAngle(cameraAnglePO);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -450,35 +398,7 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- private AnglePO setRotateForMove(UserEntity user,String trace_id,AnglePO cameraAngle){
|
|
|
|
- int angle = cameraAngle.getYaw();
|
|
|
|
- int offAngle = 0;
|
|
|
|
- offAngle = angle%45;
|
|
|
|
-
|
|
|
|
- //先简单来,就累加。后续要再调试
|
|
|
|
- //存储矫正的一组帧
|
|
|
|
- offAngle = Math.abs(45 - offAngle);
|
|
|
|
- RotateFrameEntity _rotateFrameEntity = null;
|
|
|
|
- for(int j=0;j<offAngle;++j){
|
|
|
|
- ActionPO rotateRequestPO = new ActionPO();
|
|
|
|
- rotateRequestPO.setAction_type(1014);
|
|
|
|
- rotateRequestPO.setTrace_id(trace_id);
|
|
|
|
- rotateRequestPO.setUser_id(user.getUserId());
|
|
|
|
- _rotateFrameEntity = rotateFrameService.findByAppIdAndBreakPointIdAndFrameIndex(user.getAppId(),user.getBreakPointId(),angle+j);
|
|
|
|
- rotateRequestPO.setFrameId(_rotateFrameEntity.getId());
|
|
|
|
- redisCache.setCacheList("setCacheRequest:"+user.getUserId(), Arrays.asList(rotateRequestPO));
|
|
|
|
- }
|
|
|
|
- if(_rotateFrameEntity == null){
|
|
|
|
- AnglePO cameraAnglePO = new AnglePO();
|
|
|
|
- cameraAnglePO.setPitch(0);
|
|
|
|
- cameraAnglePO.setYaw(angle);
|
|
|
|
- cameraAnglePO.setRoll(0);
|
|
|
|
- return cameraAnglePO;
|
|
|
|
- }
|
|
|
|
- else{
|
|
|
|
- return _rotateFrameEntity.getCameraAngle();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public void getBreakPoint(BreakPointRequest request, StreamObserver<BreakPointReply> responseObserver) {
|
|
public void getBreakPoint(BreakPointRequest request, StreamObserver<BreakPointReply> responseObserver) {
|
|
@@ -492,8 +412,9 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
|
|
|
|
|
|
//从表breakpoints里获取所有的呼吸点,并且是数组
|
|
//从表breakpoints里获取所有的呼吸点,并且是数组
|
|
//TODO 根据查询所有
|
|
//TODO 根据查询所有
|
|
- UserEntity userEntity = userService.findUserId(user_id);
|
|
|
|
- List<BreakpointsEntity> allList = breakpointsService.findByAppId(userEntity.getAppId());
|
|
|
|
|
|
+ //UserEntity userEntity = userService.findUserId(user_id);
|
|
|
|
+ JSONObject myState = redisCache.getCacheObject("UserState:"+user_id);
|
|
|
|
+ List<BreakpointsEntity> allList = breakpointsService.findByAppId(myState.getString("appId"));
|
|
|
|
|
|
BreakPointReply.Builder res = BreakPointReply.newBuilder();
|
|
BreakPointReply.Builder res = BreakPointReply.newBuilder();
|
|
res.setActionType(action_type);
|
|
res.setActionType(action_type);
|
|
@@ -533,68 +454,8 @@ public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBa
|
|
public void joystick(JoystickRequest request, StreamObserver<NormalReply> responseObserver) {
|
|
public void joystick(JoystickRequest request, StreamObserver<NormalReply> responseObserver) {
|
|
try {
|
|
try {
|
|
log.info("进入{}",request);
|
|
log.info("进入{}",request);
|
|
- int actionType = request.getActionType();
|
|
|
|
- DirAction dirAction = request.getDirAction();
|
|
|
|
- String trace_id = request.getTraceId();
|
|
|
|
- String user_id = request.getUserId();
|
|
|
|
- String packet_id = request.getPacketId();
|
|
|
|
-
|
|
|
|
- ActionPO joystickPO = new ActionPO();
|
|
|
|
- joystickPO.setAction_type(actionType);
|
|
|
|
- joystickPO.setTrace_id(trace_id);
|
|
|
|
- joystickPO.setUser_id(user_id);
|
|
|
|
- joystickPO.setPacket_id(packet_id);
|
|
|
|
- AnglePO playerAngle = joystickPO.getPlayerAngle();
|
|
|
|
- playerAngle.setYaw(dirAction.getMoveAngle());
|
|
|
|
- joystickPO.setPlayerAngle(playerAngle);
|
|
|
|
- redisCache.setCacheList("setCacheRequest:"+user_id, Arrays.asList(joystickPO));
|
|
|
|
- //速度不够,只是让人旋转
|
|
|
|
- if(dirAction.getSpeedLevel()<7){
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- UserEntity user = userService.findUserId(user_id);
|
|
|
|
- //邻居点里找角度最合适的点
|
|
|
|
- BreakpointsEntity breakpointsEntity = breakpointsService.findByAppIdAndBreakPointId(user.getAppId(), user.getBreakPointId());
|
|
|
|
- BreakpointsEntity targetBreakpointsEntity = null;
|
|
|
|
- List<Integer> neighBreakPointIds = breakpointsEntity.getContact();
|
|
|
|
-
|
|
|
|
- double offAngle = 1000;
|
|
|
|
- double moveAngle = dirAction.getMoveAngle();
|
|
|
|
- int playerAngleYaw = 0;
|
|
|
|
-
|
|
|
|
- if(neighBreakPointIds.size()>0){
|
|
|
|
- for(int j=0;j<neighBreakPointIds.size();++j){
|
|
|
|
- BreakpointsEntity _breakpointsEntity = breakpointsService.findByAppIdAndBreakPointId(user.getAppId(), (long)neighBreakPointIds.get(j));
|
|
|
|
- playerAngleYaw = sceneGrpcService.calAngleForBreakPointId(breakpointsEntity,_breakpointsEntity);
|
|
|
|
- if(Math.abs(playerAngleYaw - moveAngle)<offAngle){
|
|
|
|
- offAngle = Math.abs(playerAngleYaw - moveAngle);
|
|
|
|
- targetBreakpointsEntity = _breakpointsEntity;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- RotateFrameEntity rotateFrameEntity = rotateFrameService.findById(user.getFrameId());
|
|
|
|
- AnglePO cameraAnglePO = rotateFrameEntity.getCameraAngle();
|
|
|
|
- cameraAnglePO = setRotateForMove( user, trace_id,cameraAnglePO);
|
|
|
|
- JSONArray path = new JSONArray();
|
|
|
|
- path.add(user.getBreakPointId());
|
|
|
|
- path.add(targetBreakpointsEntity.getBreakPointId());
|
|
|
|
-
|
|
|
|
- ActionPO movePO = new ActionPO();
|
|
|
|
- movePO.setAction_type(1);
|
|
|
|
- movePO.setTrace_id(trace_id);
|
|
|
|
- movePO.setUser_id(user_id);
|
|
|
|
- movePO.setPath(path);
|
|
|
|
-
|
|
|
|
- playerAngle.setYaw(playerAngleYaw);
|
|
|
|
- movePO.setPlayerAngle(playerAngle);
|
|
|
|
|
|
|
|
- movePO.setCameraAngle(cameraAnglePO);
|
|
|
|
-
|
|
|
|
- int subFrameIndex = moveFrameService.getCountByAppIAndStartBreakPointIdAndEndBreakPointIdAndAngle( user.getAppId(),user.getBreakPointId(),targetBreakpointsEntity.getBreakPointId(), cameraAnglePO.getYaw()%45);
|
|
|
|
- movePO.setSubFrameIndex(subFrameIndex);
|
|
|
|
-
|
|
|
|
- redisCache.setCacheList("setCacheRequest:"+user_id, Arrays.asList(movePO));
|
|
|
|
- }
|
|
|
|
|
|
+ redisPublishService.sendProtocolMessage(RedisQueueConstant.JOYSTICK_QUEUE,request.toBuilder());
|
|
//找到与角度move_angle最近的邻居点
|
|
//找到与角度move_angle最近的邻居点
|
|
//移动player,并且更新相机角度
|
|
//移动player,并且更新相机角度
|
|
NormalReply.Builder builder = NormalReply.newBuilder();
|
|
NormalReply.Builder builder = NormalReply.newBuilder();
|