package com.fdkk.fdkkmeta.grpcService; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ArrayUtil; 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.po.PointPO; import com.fdkk.fdkkmeta.grpc.*; import com.fdkk.fdkkmeta.util.ProtoJsonUtils; import com.fdkk.fdkkmeta.util.kesar.GetRoute; import com.google.protobuf.Message; import com.googlecode.protobuf.format.JsonFormat; import io.grpc.stub.StreamObserver; import lombok.extern.slf4j.Slf4j; import net.devh.boot.grpc.server.service.GrpcService; import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import java.io.File; import java.io.IOException; /** * @author Xiewj * @date 2022/5/9 */ @GrpcService @Slf4j public class sceneGrpcServer extends SceneGrpcServiceGrpc.SceneGrpcServiceImplBase { @Autowired MetaConfig metaConfig; /*** * 回复 案例 * SceneReply res = SceneReply.newBuilder().setRes(id+","+name).build(); * responseObserver.onNext(res); */ @Override public void getRoute(RouteRequest request, StreamObserver responseObserver) { // grpc服务端获取调用端请求参数 String sceneCode = request.getSceneCode(); Point sLocation = request.getSLocation(); Point eLocation = request.getELocation(); RouteDto po=new RouteDto(); PointPO s=new PointPO(); s.setX(Double.parseDouble(sLocation.getX())); s.setY(Double.parseDouble(sLocation.getY())); s.setZ(Double.parseDouble(sLocation.getY())); PointPO e=new PointPO(); e.setX(Double.parseDouble(eLocation.getX())); e.setY(Double.parseDouble(eLocation.getY())); e.setZ(Double.parseDouble(eLocation.getY())); po.setE_location(e); po.setS_location(s); po.setSceneCode(sceneCode); JSONArray maps = GetRoute.getRoute(metaConfig.getFreespacePath()+ File.separator +"target_freespace.json", po); // 这里可以有自己的业务代码,只需要按照porto中的返回类型返回参数即可 RouteReply.Builder builder = RouteReply.newBuilder(); if (ArrayUtil.isNotEmpty(maps)) { for (int i = 0; i < maps.size(); i++) { RouteArray.Builder addInBuilder = builder.addInBuilder(); ProtoJsonUtils.toProtoBean(addInBuilder, maps.get(i).toString()); } } responseObserver.onNext(builder.build()); responseObserver.onCompleted(); } @Override public void init(InitRequest request, StreamObserver responseObserver) { try { log.info("进入{}",request); // responseObserver.onNext(res); // responseObserver.onCompleted(); // log.info("回复{}",res); } catch(Exception e) { e.printStackTrace(); } } @Override public void rotate(RotateRequest request, StreamObserver responseObserver) { try { log.info("进入{}",request); // responseObserver.onNext(res); // responseObserver.onCompleted(); // log.info("回复{}",res); } catch(Exception e) { e.printStackTrace(); } } @Override public void moveStart(StartMoveRequest request, StreamObserver responseObserver) { try { /* * 1.从user表里获得当前人物所在的breakPoint_id * 2.根据breakPoint_id,从breakpoints表里获得对应的起始坐标 * 3.根据request中的clicking_action里的clicking_point(目的地)以及当前起始坐标计算出路径 * 4.返回整个路径的一段 * * */ log.info("进入{}",request); // responseObserver.onNext(res); // responseObserver.onCompleted(); // log.info("回复{}",res); } catch(Exception e) { e.printStackTrace(); } } @Override public void moveProcess(MoveNextNeighborRequest request, StreamObserver responseObserver) { try { log.info("进入{}",request); // responseObserver.onNext(res); // responseObserver.onCompleted(); // log.info("回复{}",res); } catch(Exception e) { e.printStackTrace(); } } @Override public void getBreakPoint(BreakPointRequest request, StreamObserver responseObserver) { try { log.info("进入{}",request); // responseObserver.onNext(res); // responseObserver.onCompleted(); // log.info("回复{}",res); } catch(Exception e) { e.printStackTrace(); } } //操作杆 @Override public void joystick(JoystickRequest request, StreamObserver responseObserver) { try { log.info("进入{}",request); // responseObserver.onNext(res); // responseObserver.onCompleted(); // log.info("回复{}",res); } catch(Exception e) { e.printStackTrace(); } } }