| | |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.zy.common.Cools; |
| | | import com.zy.common.SpringUtils; |
| | | import com.zy.common.exception.CoolException; |
| | | import com.zy.common.utils.RedisUtil; |
| | | import com.zy.core.News; |
| | | import com.zy.core.ThreadHandler; |
| | |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | @Slf4j |
| | | @SuppressWarnings("all") |
| | |
| | | |
| | | |
| | | private RedisUtil redisUtil; |
| | | private JSONObject fakeStatusDemo = JSONObject.parseObject("{\"mode\":1,\"extend\":{\"countQuantity\":400,\"suspendState\":0,\"minCellVoltage\":3279,\"chargeCycleTimes\":0,\"maxCellVoltage\":3281,\"surplusQuantity\":204,\"voltage\":5248},\"hasLift\":false,\"hasPallet\":false,\"batteryVoltage\":5248,\"runDirection\":\"2\",\"currentCode\":\"{\\\"x\\\":12,\\\"y\\\":37,\\\"z\\\":3}\",\"errorCode\":\"0\",\"hasCharge\":false,\"batteryPower\":\"51\",\"speed\":0,\"deviceStatus\":1}"); |
| | | private JSONObject fakeStatusDemo = JSONObject.parseObject("{\"mode\":1,\"extend\":{\"countQuantity\":400,\"suspendState\":0,\"minCellVoltage\":3279,\"chargeCycleTimes\":0,\"maxCellVoltage\":3281,\"surplusQuantity\":204,\"voltage\":5248},\"hasLift\":false,\"hasPallet\":false,\"batteryVoltage\":5248,\"runDirection\":\"2\",\"currentCode\":\"{\\\"x\\\":19,\\\"y\\\":11,\\\"z\\\":2}\",\"errorCode\":\"0\",\"hasCharge\":false,\"batteryPower\":\"51\",\"speed\":0,\"deviceStatus\":1}"); |
| | | private HashMap<String, Socket> fakeServerMap = new HashMap(); |
| | | private HashMap<String, JSONObject> fakeStatusMap = new HashMap(); |
| | | private HashMap<String, JSONObject> fakeCommandMap = new HashMap(); |
| | | |
| | | private boolean fake = false; |
| | | |
| | |
| | | try { |
| | | ServerSocket serverSocket = new ServerSocket(device.getPort()); |
| | | Socket fakeSocket = serverSocket.accept(); |
| | | |
| | | String fakeStatus = JSON.toJSONString(fakeStatusDemo); |
| | | if (!Cools.isEmpty(device.getFakeInitStatus())) { |
| | | fakeStatus = device.getFakeInitStatus(); |
| | | } |
| | | |
| | | fakeServerMap.put(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), fakeSocket); |
| | | fakeStatusMap.put(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), JSON.parseObject(JSON.toJSONString(fakeStatusDemo))); |
| | | fakeStatusMap.put(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), JSON.parseObject(fakeStatus)); |
| | | while (true) { |
| | | if(fakeSocket == null) { |
| | | fakeServerMap.remove(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo()); |
| | | break; |
| | | } |
| | | |
| | | if(fakeSocket.isClosed()) { |
| | | fakeSocket = null; |
| | | continue; |
| | | } |
| | | |
| | | handleClient(fakeSocket, device); |
| | | handleClient(device); |
| | | } |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | } |
| | | }); |
| | | fakeThread.start(); |
| | | |
| | | Thread fakeCommandThread = new Thread(() -> { |
| | | while (true) { |
| | | try { |
| | | excuteFakeCommand(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo()); |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | }); |
| | | fakeCommandThread.start(); |
| | | |
| | | // init |
| | | ThreadHandler thread = new NyShuttleThread(device, redisUtil);; |
| | |
| | | } |
| | | } |
| | | |
| | | private void handleClient(Socket socket, DeviceConfig device) throws IOException { |
| | | private void excuteFakeCommand(String key) { |
| | | if (!fakeCommandMap.containsKey(key)) { |
| | | return; |
| | | } |
| | | JSONObject command = fakeCommandMap.get(key); |
| | | fakeCommandMap.remove(key); |
| | | new Thread(() -> { |
| | | try { |
| | | JSONObject fakeStatus = fakeStatusMap.get(key); |
| | | String commandType = command.getString("commandType"); |
| | | if (commandType.equals("liftUp")) { |
| | | fakeStatus.put("deviceStatus", 0);//设备忙碌 |
| | | fakeStatusMap.put(key, fakeStatus); |
| | | |
| | | //delay |
| | | Thread.sleep(2000); |
| | | fakeStatus.put("hasLift", true); |
| | | fakeStatus.put("deviceStatus", 1);//设备空闲 |
| | | fakeStatusMap.put(key, fakeStatus); |
| | | }else if (commandType.equals("liftDown")) { |
| | | fakeStatus.put("deviceStatus", 0);//设备忙碌 |
| | | fakeStatusMap.put(key, fakeStatus); |
| | | |
| | | //delay |
| | | Thread.sleep(2000); |
| | | fakeStatus.put("hasLift", false); |
| | | fakeStatus.put("deviceStatus", 1);//设备空闲 |
| | | fakeStatusMap.put(key, fakeStatus); |
| | | }else if (commandType.equals("charge")) { |
| | | fakeStatus.put("deviceStatus", 0);//设备忙碌 |
| | | fakeStatusMap.put(key, fakeStatus); |
| | | |
| | | //delay |
| | | Thread.sleep(2000); |
| | | fakeStatus.put("hasCharge", true); |
| | | fakeStatus.put("deviceStatus", 1);//设备空闲 |
| | | fakeStatusMap.put(key, fakeStatus); |
| | | }else if (commandType.equals("stopCharge")) { |
| | | fakeStatus.put("deviceStatus", 0);//设备忙碌 |
| | | fakeStatusMap.put(key, fakeStatus); |
| | | |
| | | //delay |
| | | Thread.sleep(2000); |
| | | fakeStatus.put("hasCharge", false); |
| | | fakeStatus.put("deviceStatus", 1);//设备空闲 |
| | | fakeStatusMap.put(key, fakeStatus); |
| | | }else if (commandType.equals("updateFloor")) { |
| | | fakeStatus.put("deviceStatus", 0);//设备忙碌 |
| | | fakeStatusMap.put(key, fakeStatus); |
| | | |
| | | //delay |
| | | Thread.sleep(2000); |
| | | |
| | | JSONObject body = command.getJSONObject("commandBody"); |
| | | String currentCode = fakeStatus.getString("currentCode"); |
| | | JSONObject point = JSON.parseObject(currentCode); |
| | | point.put("z", body.getInteger("z")); |
| | | fakeStatus.put("currentCode", JSON.toJSONString(point)); |
| | | fakeStatus.put("deviceStatus", 1);//设备空闲 |
| | | fakeStatusMap.put(key, fakeStatus); |
| | | }else if (commandType.equals("move")) { |
| | | fakeStatus.put("deviceStatus", 0);//设备忙碌 |
| | | fakeStatusMap.put(key, fakeStatus); |
| | | Thread.sleep(2000); |
| | | |
| | | JSONObject body = command.getJSONObject("commandBody"); |
| | | String pathList = body.getString("path"); |
| | | List<JSONObject> list = JSON.parseArray(pathList, JSONObject.class); |
| | | for (JSONObject path : list) { |
| | | String currentCode = fakeStatus.getString("currentCode"); |
| | | JSONObject point = JSON.parseObject(currentCode); |
| | | point.put("x", path.getInteger("xp")); |
| | | point.put("y", path.getInteger("yp")); |
| | | point.put("z", path.getInteger("z")); |
| | | fakeStatus.put("currentCode", JSON.toJSONString(point)); |
| | | fakeStatus.put("deviceStatus", 0);//设备忙碌 |
| | | fakeStatusMap.put(key, fakeStatus); |
| | | Thread.sleep(2000); |
| | | } |
| | | |
| | | fakeStatus.put("deviceStatus", 1);//设备空闲 |
| | | fakeStatusMap.put(key, fakeStatus); |
| | | } |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | } |
| | | }).start(); |
| | | } |
| | | |
| | | private void handleClient(DeviceConfig device) throws IOException { |
| | | try { |
| | | Socket socket = fakeServerMap.get(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo()); |
| | | // 获取输入流 |
| | | BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); |
| | | // 读取服务器的响应 |
| | |
| | | } |
| | | |
| | | JSONObject result = JSON.parseObject(sb.toString()); |
| | | log.info("收到Client Data: {}", JSON.toJSONString(result)); |
| | | // log.info("收到Client Data: {}", JSON.toJSONString(result)); |
| | | processCommand(result, device); |
| | | } catch (Exception e) { |
| | | // e.printStackTrace(); |
| | | socket.close(); |
| | | fakeServerMap.remove(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo()); |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | |
| | | JSONObject fakeStatus = fakeStatusMap.get(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo()); |
| | | |
| | | JSONObject request = result.getJSONObject("request"); |
| | | JSONObject header = request.getJSONObject("header"); |
| | | JSONObject body = request.getJSONObject("body"); |
| | | |
| | | Integer requestId = header.getInteger("requestId"); |
| | | String requestType = body.getString("requestType"); |
| | | Integer taskId = body.getInteger("taskId"); |
| | | |
| | | JSONObject fakeCommand = new JSONObject(); |
| | | fakeCommand.put("deviceNo", device.getDeviceNo()); |
| | | fakeCommand.put("deviceType", device.getDeviceType()); |
| | | fakeCommand.put("commandType", requestType); |
| | | fakeCommand.put("commandBody", body); |
| | | if (requestType.equals("liftUp")) { |
| | | fakeStatus.put("hasLift", true); |
| | | fakeCommandMap.put(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), fakeCommand); |
| | | response = genereateFakeCommandResponse(requestId, taskId, requestType); |
| | | } else if (requestType.equals("liftDown")) { |
| | | fakeStatus.put("hasLift", false); |
| | | fakeCommandMap.put(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), fakeCommand); |
| | | response = genereateFakeCommandResponse(requestId, taskId, requestType); |
| | | } else if (requestType.equals("charge")) { |
| | | fakeStatus.put("hasCharge", true); |
| | | fakeCommandMap.put(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), fakeCommand); |
| | | response = genereateFakeCommandResponse(requestId, taskId, requestType); |
| | | } else if (requestType.equals("stopCharge")) { |
| | | fakeStatus.put("hasCharge", false); |
| | | fakeCommandMap.put(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), fakeCommand); |
| | | response = genereateFakeCommandResponse(requestId, taskId, requestType); |
| | | } else if (requestType.equals("updateFloor")) { |
| | | String currentCode = fakeStatus.getString("currentCode"); |
| | | JSONObject point = JSON.parseObject(currentCode); |
| | | point.put("z", body.getInteger("z")); |
| | | fakeStatus.put("currentCode", JSON.toJSONString(point)); |
| | | fakeCommandMap.put(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), fakeCommand); |
| | | response = genereateFakeCommandResponse(requestId, taskId, requestType); |
| | | } else if (requestType.equals("move")) { |
| | | String pathList = body.getString("path"); |
| | | List<JSONObject> list = JSON.parseArray(pathList, JSONObject.class); |
| | | for (JSONObject path : list) { |
| | | String currentCode = fakeStatus.getString("currentCode"); |
| | | JSONObject point = JSON.parseObject(currentCode); |
| | | point.put("x", path.getInteger("xp")); |
| | | point.put("y", path.getInteger("yp")); |
| | | point.put("z", path.getInteger("z")); |
| | | fakeStatus.put("currentCode", JSON.toJSONString(point)); |
| | | try { |
| | | Thread.sleep(100); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | fakeCommandMap.put(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), fakeCommand); |
| | | response = genereateFakeCommandResponse(requestId, taskId, requestType); |
| | | } else if (requestType.equals("readState")) { |
| | | response = genereateFakeStatusResponse(taskId, fakeStatus); |
| | | response = genereateFakeStatusResponse(requestId, fakeStatus); |
| | | } |
| | | |
| | | fakeStatusMap.put(String.valueOf(SlaveType.Shuttle) + device.getDeviceNo(), fakeStatus); |
| | |
| | | return JSON.toJSONString(result); |
| | | } |
| | | |
| | | public String genereateFakeCommandResponse(Integer responseId, Integer taskId, String commandType) { |
| | | JSONObject result = new JSONObject(); |
| | | JSONObject response = new JSONObject(); |
| | | result.put("msgType", "responseMsg"); |
| | | result.put("robotId", 5001); |
| | | result.put("response", response); |
| | | |
| | | JSONObject header = new JSONObject(); |
| | | JSONObject body = new JSONObject(); |
| | | response.put("header", header); |
| | | response.put("body", body); |
| | | |
| | | header.put("responseId", responseId); |
| | | header.put("version", "GV-APP-F427-N24036-1112"); |
| | | |
| | | body.put("responseType", commandType); |
| | | body.put("result", "success"); |
| | | body.put("taskId", taskId); |
| | | return JSON.toJSONString(result); |
| | | } |
| | | |
| | | @Override |
| | | public boolean connect() { |
| | | return true; |