|
|
@@ -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));
|
|
|
}
|
|
|
|
|
|
/*
|