提交 9ec007c0 authored 作者: wangqiang's avatar wangqiang

问题修改

上级 d31675c6
...@@ -4,11 +4,12 @@ import com.priusis.client.data.kv.KvEntry; ...@@ -4,11 +4,12 @@ import com.priusis.client.data.kv.KvEntry;
import com.priusis.client.extensions.ExtensionUpdate; import com.priusis.client.extensions.ExtensionUpdate;
import com.priusis.client.extensions.http.conf.HttpConfiguration; import com.priusis.client.extensions.http.conf.HttpConfiguration;
import com.priusis.client.service.MqttDeliveryFuture; import com.priusis.client.service.MqttDeliveryFuture;
import com.priusis.client.service.MqttRpcDataMessage;
import com.priusis.client.service.conf.PcExtensionConfiguration; import com.priusis.client.service.conf.PcExtensionConfiguration;
import com.priusis.client.service.core.MqttService; import com.priusis.client.service.core.MqttService;
import com.priusis.client.service.data.DeviceData; import com.priusis.client.service.data.DeviceData;
import com.priusis.client.service.data.RpcCommandResponse;
import com.priusis.client.util.ConfigurationTools; import com.priusis.client.util.ConfigurationTools;
import com.priusis.client.service.MqttRpcDataMessage;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
...@@ -87,6 +88,16 @@ public class DefaultHttpService extends ExtensionUpdate implements HttpService { ...@@ -87,6 +88,16 @@ public class DefaultHttpService extends ExtensionUpdate implements HttpService {
return mqttService.flushRpcDataToFile(mqttRpcDataMessage); return mqttService.flushRpcDataToFile(mqttRpcDataMessage);
} }
@Override
public void processRpcRes(String token, MqttRpcDataMessage mqttRpcDataMessage) throws Exception {
RpcCommandResponse rpcCommandResponse = new RpcCommandResponse();
rpcCommandResponse.setRequestId(mqttRpcDataMessage.getRequestId());
rpcCommandResponse.setBizRequestId(mqttRpcDataMessage.getBizRequestId());
rpcCommandResponse.setMethod(mqttRpcDataMessage.getMethod());
rpcCommandResponse.setData(mqttRpcDataMessage.getParams());
mqttService.onDeviceRpcResponse(rpcCommandResponse);
}
@Override @Override
public MqttRpcDataMessage readFromFile(String method) throws IOException { public MqttRpcDataMessage readFromFile(String method) throws IOException {
return mqttService.readFromFile(method); return mqttService.readFromFile(method);
......
...@@ -3,8 +3,8 @@ package com.priusis.client.extensions.http; ...@@ -3,8 +3,8 @@ package com.priusis.client.extensions.http;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.priusis.client.extensions.http.conf.HttpRequestProcessingError; import com.priusis.client.extensions.http.conf.HttpRequestProcessingError;
import com.priusis.client.service.TenantManagerService;
import com.priusis.client.service.MqttRpcDataMessage; import com.priusis.client.service.MqttRpcDataMessage;
import com.priusis.client.service.TenantManagerService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
...@@ -14,8 +14,6 @@ import org.springframework.web.bind.annotation.*; ...@@ -14,8 +14,6 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import static com.priusis.client.util.JsonTools.fromString;
@RestController @RestController
@Slf4j @Slf4j
public class HttpController { public class HttpController {
...@@ -53,6 +51,16 @@ public class HttpController { ...@@ -53,6 +51,16 @@ public class HttpController {
} }
} }
@RequestMapping(value = "/rpc_res/{token}", method = RequestMethod.POST)
public void handleRpcResDataRequest(@PathVariable String token, @RequestBody String body) {
MqttRpcDataMessage mqttRpcDataMessage = JSONUtil.toBean(body, MqttRpcDataMessage.class);
try {
service.processRpcRes(token, mqttRpcDataMessage);
} catch (Exception e) {
log.error("Failed to process rpc res persistent : {}", body);
}
}
@ExceptionHandler(Exception.class) @ExceptionHandler(Exception.class)
public void handlePriusisiotException(Exception exception, HttpServletResponse response) { public void handlePriusisiotException(Exception exception, HttpServletResponse response) {
log.debug("Processing exception {}", exception.getMessage(), exception); log.debug("Processing exception {}", exception.getMessage(), exception);
......
...@@ -14,5 +14,7 @@ public interface HttpService extends ExtensionService { ...@@ -14,5 +14,7 @@ public interface HttpService extends ExtensionService {
File flushRpcDataToFile(MqttRpcDataMessage mqttRpcDataMessage) throws IOException; File flushRpcDataToFile(MqttRpcDataMessage mqttRpcDataMessage) throws IOException;
void processRpcRes(String token, MqttRpcDataMessage mqttRpcDataMessage) throws Exception;
MqttRpcDataMessage readFromFile(String method) throws IOException; MqttRpcDataMessage readFromFile(String method) throws IOException;
} }
...@@ -72,6 +72,11 @@ public abstract class DefaultTenantManagerService implements TenantManagerServic ...@@ -72,6 +72,11 @@ public abstract class DefaultTenantManagerService implements TenantManagerServic
httpService.processEventRequest(token, body); httpService.processEventRequest(token, body);
} }
@Override
public void processRpcRes(String token, MqttRpcDataMessage mqttRpcDataMessage) throws Exception {
httpService.processRpcRes(token, mqttRpcDataMessage);
}
@Override @Override
public File flushRpcDataToFile(MqttRpcDataMessage mqttRpcDataMessage) throws IOException { public File flushRpcDataToFile(MqttRpcDataMessage mqttRpcDataMessage) throws IOException {
return httpService.flushRpcDataToFile(mqttRpcDataMessage); return httpService.flushRpcDataToFile(mqttRpcDataMessage);
......
...@@ -12,6 +12,8 @@ public interface TenantManagerService { ...@@ -12,6 +12,8 @@ public interface TenantManagerService {
void processEventRequest(String token, String body) throws Exception; void processEventRequest(String token, String body) throws Exception;
void processRpcRes(String token, MqttRpcDataMessage mqttRpcDataMessage) throws Exception;
File flushRpcDataToFile(MqttRpcDataMessage mqttRpcDataMessage) throws IOException; File flushRpcDataToFile(MqttRpcDataMessage mqttRpcDataMessage) throws IOException;
MqttRpcDataMessage readFromFile(String method) throws IOException; MqttRpcDataMessage readFromFile(String method) throws IOException;
......
...@@ -4,6 +4,7 @@ import cn.hutool.core.convert.Convert; ...@@ -4,6 +4,7 @@ import cn.hutool.core.convert.Convert;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil; import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.node.ObjectNode;
...@@ -15,6 +16,7 @@ import com.priusis.client.service.conf.*; ...@@ -15,6 +16,7 @@ import com.priusis.client.service.conf.*;
import com.priusis.client.service.data.*; import com.priusis.client.service.data.*;
import com.priusis.controller.ProgramController; import com.priusis.controller.ProgramController;
import com.priusis.controller.RemoteControlController; import com.priusis.controller.RemoteControlController;
import com.priusis.dto.HwPortControllerDto;
import com.priusis.lib.R; import com.priusis.lib.R;
import com.priusis.monitor.mqtt.*; import com.priusis.monitor.mqtt.*;
import com.priusis.service.common.MacAddrService; import com.priusis.service.common.MacAddrService;
...@@ -47,6 +49,8 @@ import java.util.concurrent.atomic.AtomicInteger; ...@@ -47,6 +49,8 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Function; import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.priusis.client.util.JsonTools.*; import static com.priusis.client.util.JsonTools.*;
...@@ -87,8 +91,9 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall ...@@ -87,8 +91,9 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall
private static final String DEVICE_TELEMETRY_TOPIC = "devices/telemetry"; private static final String DEVICE_TELEMETRY_TOPIC = "devices/telemetry";
private static final String DEVICE_ATTRIBUTES_TOPIC = "devices/attrs"; private static final String DEVICE_ATTRIBUTES_TOPIC = "devices/attrs";
private static final String DEVICE_RPC_RES_TOPIC = "devices/rpc/req"; private static final String DEVICE_RPC_REQ_TOPIC = "devices/rpc/req";
private static final String DEVICE_RPC_TOPIC = DEVICE_RPC_RES_TOPIC + "/+"; private static final String DEVICE_RPC_RES_TOPIC = "devices/rpc/res";
private static final String DEVICE_RPC_TOPIC = DEVICE_RPC_REQ_TOPIC + "/+";
private static final String DEVICE_EVENT_TOPIC = "devices/event"; private static final String DEVICE_EVENT_TOPIC = "devices/event";
private static final String DEVICE_GET_ATTRIBUTES_REQUEST_TOPIC = "devices/attrs/req/1"; private static final String DEVICE_GET_ATTRIBUTES_REQUEST_TOPIC = "devices/attrs/req/1";
private static final String DEVICE_GET_ATTRIBUTES_RESPONSE_PLUS_TOPIC = "devices/attrs/res/+"; private static final String DEVICE_GET_ATTRIBUTES_RESPONSE_PLUS_TOPIC = "devices/attrs/res/+";
...@@ -105,6 +110,10 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall ...@@ -105,6 +110,10 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall
private final Set<AttributesUpdateSubscription> attributeUpdateSubs = ConcurrentHashMap.newKeySet(); private final Set<AttributesUpdateSubscription> attributeUpdateSubs = ConcurrentHashMap.newKeySet();
private final Map<AttributeRequestKey, AttributeRequestListener> pendingAttrRequestsMap = new ConcurrentHashMap<>(); private final Map<AttributeRequestKey, AttributeRequestListener> pendingAttrRequestsMap = new ConcurrentHashMap<>();
private final String REQUEST_ID_PATTERN = "(?<requestId>\\d+)";
private final String DEVICE_RPC_REQUEST_TOPIC_PATTERN = DEVICE_RPC_REQ_TOPIC + "/" + REQUEST_ID_PATTERN;
private final Pattern DEVICE_RPC_REQUEST_PATTERN = Pattern.compile(DEVICE_RPC_REQUEST_TOPIC_PATTERN);
private String tenantLabel; private String tenantLabel;
private PersistentFileService persistentFileService; private PersistentFileService persistentFileService;
...@@ -271,20 +280,20 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall ...@@ -271,20 +280,20 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall
@Override @Override
public void onDeviceRpcResponse(RpcCommandResponse response) { public void onDeviceRpcResponse(RpcCommandResponse response) {
final int msgId = msgIdSeq.incrementAndGet();
int requestId = response.getRequestId(); int requestId = response.getRequestId();
String bizRequestId = response.getBizRequestId();
String data = response.getData(); String data = response.getData();
String method = response.getMethod();
/*ObjectNode paramsNode = newNode();
paramsNode.put("code", "1");
paramsNode.put("msg", "success");*/
byte[] msgData = toBytes(newNode().put("requestId", bizRequestId).put("method", method)
.put("resTime", System.currentTimeMillis()).put("response", data));
persistMessage(DEVICE_RPC_RES_TOPIC + "/" + requestId, msgIdSeq.incrementAndGet(), msgData, null,
error ->
log.warn("Could not publish RPC res", error));
ObjectNode node = newNode();
node.put("id", requestId);
node.put("data", data);
persistMessage(DEVICE_RPC_TOPIC, msgId, toBytes(node),
token -> {
log.debug("[{}] RPC response from device was delivered!", requestId);
},
error -> {
log.warn("[{}] Failed to report RPC response from device!", requestId, error);
});
} }
@Override @Override
...@@ -324,8 +333,8 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall ...@@ -324,8 +333,8 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall
onAttributesUpdate(message); onAttributesUpdate(message);
} else if (topic.equals(DEVICE_GET_ATTRIBUTES_RESPONSE_PLUS_TOPIC)) { } else if (topic.equals(DEVICE_GET_ATTRIBUTES_RESPONSE_PLUS_TOPIC)) {
onDeviceAttributesResponse(message); onDeviceAttributesResponse(message);
} else if (topic.startsWith(DEVICE_RPC_RES_TOPIC)) { } else if (topic.startsWith(DEVICE_RPC_REQ_TOPIC)) {
onRpcCommand(message); onRpcCommand(topic, message);
} else if (topic.startsWith(DEVICE_ATTRIBUTES_TOPIC)) { } else if (topic.startsWith(DEVICE_ATTRIBUTES_TOPIC)) {
onGatewayAttributesUpdate(message); onGatewayAttributesUpdate(message);
} else if (topic.equals(DEVICE_GET_ATTRIBUTES_RESPONSE_TOPIC)) { } else if (topic.equals(DEVICE_GET_ATTRIBUTES_RESPONSE_TOPIC)) {
...@@ -369,16 +378,44 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall ...@@ -369,16 +378,44 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall
} }
} }
private void onRpcCommand(String message) { private void onRpcCommand(String topic, String message) {
JsonNode payload = fromString(message); JsonNode payload = fromString(message);
MqttRpcDataMessage mqttRpcDataMessage = MqttRpcDataMessage.builder() String bizRequestId = payload.get("requestId").asText();
int requestId = 0;
Matcher fwMatcher = DEVICE_RPC_REQUEST_PATTERN.matcher(topic);
if (fwMatcher.find()) {
requestId = Integer.parseInt(fwMatcher.group("requestId"));
}
MqttRpcDataMessage mqttRpcDataMessage = MqttRpcDataMessage.builder().requestId(requestId).bizRequestId(bizRequestId)
.method(payload.get("method").asText()).sendTime(System.currentTimeMillis()) .method(payload.get("method").asText()).sendTime(System.currentTimeMillis())
.params(Optional.ofNullable(payload.get("params")).map(JsonNode::toString).orElse(null)).build(); .params(Optional.ofNullable(payload.get("params")).map(JsonNode::toString).orElse(null)).build();
// 存储rpc下发的数据 // 存储rpc下发的数据
powerHandler(message, requestId, bizRequestId, mqttRpcDataMessage);
remoteControlHandler(message, requestId, bizRequestId, mqttRpcDataMessage);
realDataMonitorScanHandler(message, requestId, bizRequestId, mqttRpcDataMessage);
remoteRtcHandler(message, requestId, bizRequestId, mqttRpcDataMessage);
resetControlHandler(message, requestId, bizRequestId, mqttRpcDataMessage);
controlHandler(message, requestId, bizRequestId, mqttRpcDataMessage);
try {
if (!Arrays.asList("power", "remote_control", "remote_control_exit", "remote_control_accept",
"real_data_monitor", "facility_scan", "remote_rtc", "control_allow", "controll").contains(mqttRpcDataMessage.getMethod())) {
persistentFileService.flushRpcDataToFile(mqttRpcDataMessage);
}
} catch (IOException e) {
log.error("Failed to process flushRpcDataToFile : {}", message, e);
}
}
private void powerHandler(String message, int requestId, String bizRequestId, MqttRpcDataMessage mqttRpcDataMessage) {
String method = mqttRpcDataMessage.getMethod();
if (!"power".equals(method)) {
return;
}
try { try {
if ("power".equals(mqttRpcDataMessage.getMethod())) { if ("power".equals(method)) {
Integer type = JSONUtil.parseObj(mqttRpcDataMessage.getParams()).getInt("powerType"); Integer type = JSONUtil.parseObj(mqttRpcDataMessage.getParams()).getInt("powerType");
if (type == 0) { if (type == 0) {
log.info("远程关机!!!"); log.info("远程关机!!!");
...@@ -387,9 +424,309 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall ...@@ -387,9 +424,309 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall
log.info("远程重启!!!"); log.info("远程重启!!!");
Runtime.getRuntime().exec("cmd /c shutdown -r"); Runtime.getRuntime().exec("cmd /c shutdown -r");
} }
return;
// response
ObjectNode paramsNode = newNode();
paramsNode.put("code", "1");
paramsNode.put("msg", "success");
paramsNode.put("status", "success");
byte[] msgData = toBytes(newNode().put("requestId", bizRequestId).put("method", method)
.put("resTime", System.currentTimeMillis()).put("response", paramsNode.toString()));
persistMessage(DEVICE_RPC_RES_TOPIC + "/" + requestId, msgIdSeq.incrementAndGet(), msgData, null,
error ->
log.warn("Could not publish power res", error));
} }
if ("remote_control".equals(mqttRpcDataMessage.getMethod())) {// 远程控制请求 } catch (Exception e) {
log.error("Failed to process rpc command persistent : {}", message, e);
ObjectNode paramsNode = newNode();
paramsNode.put("code", "0");
paramsNode.put("msg", "fail");
paramsNode.put("status", "fail");
byte[] msgData = toBytes(newNode().put("requestId", bizRequestId).put("method", method)
.put("resTime", System.currentTimeMillis()).put("response", paramsNode.toString()));
persistMessage(DEVICE_RPC_RES_TOPIC + "/" + requestId, msgIdSeq.incrementAndGet(), msgData, null,
error ->
log.warn("Could not publish power res", error));
}
}
/**
* 远程硬件接口处理 control
*
* @param message
* @param requestId
* @param bizRequestId
* @param mqttRpcDataMessage
*/
private void controlHandler(String message, int requestId, String bizRequestId, MqttRpcDataMessage mqttRpcDataMessage) {
String method = mqttRpcDataMessage.getMethod();
if (!"controll".equals(method)) {
return;
}
if ("controll".equals(method)) {
String params = mqttRpcDataMessage.getParams();
if (StrUtil.isNotBlank(params)) {
int result;
try {
result = IHwPortController.instanceDll.APQ_HWPORT_Initialize();
log.info("APQ_HWPORT_Initialize ret:{}", result);
String status = "success";
Long sendTime = mqttRpcDataMessage.getSendTime();
long current = System.currentTimeMillis();
List<HwPortControllerDto> hwPortControllerDtos = JSONUtil.toList(params, HwPortControllerDto.class);
// 合并硬件请求检查
MqttRpcDataMessage persistentEntity = null;
try {
persistentEntity = persistentFileService.readFromFile("controll_4_merge");
} catch (Exception e) {
log.error("硬件监控上报异常merge", e.getMessage());
}
List<HwPortControllerDto> persistentHwPortControllerDtos = null;
if (null != persistentEntity) {
String persistentEntityParams = persistentEntity.getParams();
if (StrUtil.isNotBlank(persistentEntityParams)) {
persistentHwPortControllerDtos = JSONUtil.toList(persistentEntityParams, HwPortControllerDto.class);
persistentHwPortControllerDtos.removeAll(hwPortControllerDtos);
persistentHwPortControllerDtos.addAll(hwPortControllerDtos);
}
} else {
persistentHwPortControllerDtos = hwPortControllerDtos;
}
MqttRpcDataMessage mergeMqttRpcDataMessage = MqttRpcDataMessage.builder()
.sendTime(System.currentTimeMillis())
.method("controll_4_merge")
.params(JSONUtil.toJsonStr(persistentHwPortControllerDtos)).build();
persistentFileService.flushRpcDataToFile(mergeMqttRpcDataMessage);
// 收到硬件策略下发请求
log.info("收到硬件策略下发请求, sendTime:{}, params:{}", sendTime, params);
for (HwPortControllerDto hwPortControllerDto : hwPortControllerDtos) {
HwPortControllerDto.DeviceHardwareEnum deviceHardwareEnum = hwPortControllerDto.getKey();
int doType = hwPortControllerDto.getDoType();
int limitType = hwPortControllerDto.getLimitType();
int value = hwPortControllerDto.getValue();
List<Integer> hwDeviceIds = deviceHardwareEnum.getHwDeviceIds();
String hwDeviceName = deviceHardwareEnum.getName();
// 设置普通设备权限
if (Objects.equals(deviceHardwareEnum.getHwGroup(), "Normal")) {
// 1F/2T
for (Integer hwDeviceId : hwDeviceIds) {
int perm = (doType == 1 ? 2 : 1);
int result32 = IHwPortController.instanceDll.APQ_HWPORT_set_normal_device_permit(hwDeviceId, perm, null);
log.info("APQ_HWPORT_set_normal_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}",
doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32);
}
} else if (Objects.equals(deviceHardwareEnum.getHwGroup(), "Storage")) { // 设置存储设备权限
// 1F/2T/3T-ALL/4T-R/5T-CI/6T-CO 拷出目前无用!! Storage移动硬盘,TYPEC 无效 !!
for (Integer hwDeviceId : hwDeviceIds) {
int perm = (doType == 1 ? 2 : 1);
if (perm == 2) {
// limitType 1读写 2只读 3拷入 4拷出 5不限速 6限速
perm = (limitType == 1 ? 3 : limitType == 2 ? 4 : limitType == 3 ? 5 : limitType == 4 ? 6 : 3);
}
int result32 = IHwPortController.instanceDll.APQ_HWPORT_set_storage_device_permit(hwDeviceId, perm, null);
log.info("APQ_HWPORT_set_storage_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}",
doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32);
}
} else if (Objects.equals(deviceHardwareEnum.getHwGroup(), "NET")) { // 设置网络设备权限
// 1F/2T/3T-NS/4T-S-200 网口,4G/5G模块,无线WIFI区分不了 !!
for (Integer hwDeviceId : hwDeviceIds) {
int perm = (doType == 1 ? 2 : 1);
if (perm == 2) {
// limitType 1读写 2只读 3拷入 4拷出 5不限速 6限速
perm = (limitType == 5 ? 3 : limitType == 6 ? 4 : 2);
}
int result32 = IHwPortController.instanceDll.APQ_HWPORT_set_net_device_permit(hwDeviceId, perm, value * 1024, null);
log.info("APQ_HWPORT_set_net_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}",
doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32);
}
}
// 应用硬件接口管理模块的配置内容
int result5 = IHwPortController.instanceDll.APQ_HWPORT_Apply();
log.info("APQ_HWPORT_Apply ret:{}", result5);
}
MqttRpcDataMessage controllMqttRpcDataMessage = MqttRpcDataMessage.builder()
.sendTime(System.currentTimeMillis())
.method("controll")
.params("").build();
persistentFileService.flushRpcDataToFile(controllMqttRpcDataMessage);
// response
ObjectNode paramsNode = newNode();
paramsNode.put("code", "1");
paramsNode.put("msg", "success");
paramsNode.put("status", "success");
byte[] msgData = toBytes(newNode().put("requestId", bizRequestId).put("method", method)
.put("resTime", System.currentTimeMillis()).put("response", paramsNode.toString()));
persistMessage(DEVICE_RPC_RES_TOPIC + "/" + requestId, msgIdSeq.incrementAndGet(), msgData, null,
error ->
log.warn("Could not publish control reset res", error));
} catch (Exception e) {
log.error("APQ_HWPORT ERROR: {}", e.getMessage());
log.error("Failed to process rpc command persistent : {}", message, e);
ObjectNode paramsNode = newNode();
paramsNode.put("code", "0");
paramsNode.put("msg", "fail");
paramsNode.put("status", "fail");
byte[] msgData = toBytes(newNode().put("requestId", bizRequestId).put("method", method)
.put("resTime", System.currentTimeMillis()).put("response", paramsNode.toString()));
persistMessage(DEVICE_RPC_RES_TOPIC + "/" + requestId, msgIdSeq.incrementAndGet(), msgData, null,
error ->
log.warn("Could not publish control reset res", error));
} finally {
result = IHwPortController.instanceDll.APQ_HWPORT_Uninitialize();
log.info("APQ_HWPORT_Uninitialize ret:{}", result);
}
} else {
log.info("未获取到获取硬件监控配置");
}
}
}
/**
* 远程硬件Reset接口处理 control_allow
*
* @param message
* @param requestId
* @param bizRequestId
* @param mqttRpcDataMessage
*/
private void resetControlHandler(String message, int requestId, String bizRequestId, MqttRpcDataMessage
mqttRpcDataMessage) {
String method = mqttRpcDataMessage.getMethod();
if (!"control_allow".equals(method)) {
return;
}
if ("control_allow".equals(method)) {
String params = mqttRpcDataMessage.getParams();
if (StrUtil.isNotBlank(params)) {
int result;
try {
result = IHwPortController.instanceDll.APQ_HWPORT_Initialize();
log.info("APQ_HWPORT_Initialize ret:{}", result);
Long sendTime = mqttRpcDataMessage.getSendTime();
List<HwPortControllerDto> hwPortControllerDtos = JSONUtil.toList(params, HwPortControllerDto.class);
// 收到硬件策略下发请求
log.info("收到硬件策略RESET下发请求, sendTime:{}, params:{}", sendTime, params);
for (HwPortControllerDto hwPortControllerDto : hwPortControllerDtos) {
HwPortControllerDto.DeviceHardwareEnum deviceHardwareEnum = hwPortControllerDto.getKey();
List<Integer> hwDeviceIds = deviceHardwareEnum.getHwDeviceIds();
String hwDeviceName = deviceHardwareEnum.getName();
// 设置普通设备权限
if (Objects.equals(deviceHardwareEnum.getHwGroup(), "Normal")) {
// 1F/2T
for (Integer hwDeviceId : hwDeviceIds) {
int result32 = IHwPortController.instanceDll.APQ_HWPORT_set_normal_device_permit(hwDeviceId, 2, null);
log.info("APQ_HWPORT_set_normal_device_permit hwDeviceId:{}, name;{}, ret:{}", hwDeviceId, hwDeviceName, result32);
}
} else if (Objects.equals(deviceHardwareEnum.getHwGroup(), "Storage")) { // 设置存储设备权限
for (Integer hwDeviceId : hwDeviceIds) {
int result32 = IHwPortController.instanceDll.APQ_HWPORT_set_storage_device_permit(hwDeviceId, 2, null);
log.info("APQ_HWPORT_set_storage_device_permit hwDeviceId:{}, name;{}, ret:{}", hwDeviceId, hwDeviceName, result32);
}
} else if (Objects.equals(deviceHardwareEnum.getHwGroup(), "NET")) { // 设置网络设备权限
for (Integer hwDeviceId : hwDeviceIds) {
int result32 = IHwPortController.instanceDll.APQ_HWPORT_set_net_device_permit(hwDeviceId, 3, 0, null);
log.info("APQ_HWPORT_set_net_device_permit hwDeviceId:{}, name;{}, ret:{}", hwDeviceId, hwDeviceName, result32);
}
}
// 应用硬件接口管理模块的配置内容
int result5 = IHwPortController.instanceDll.APQ_HWPORT_Apply();
log.info("APQ_HWPORT_Apply ret:{}", result5);
// 删除本地mergin数据
MqttRpcDataMessage persistentEntity = null;
try {
persistentEntity = persistentFileService.readFromFile("controll_4_merge");
} catch (Exception e) {
log.error("硬件监控上报异常merge", e.getMessage());
}
List<HwPortControllerDto> persistentHwPortControllerDtos = null;
if (null != persistentEntity) {
String persistentEntityParams = persistentEntity.getParams();
if (StrUtil.isNotBlank(persistentEntityParams)) {
persistentHwPortControllerDtos = JSONUtil.toList(persistentEntityParams, HwPortControllerDto.class);
persistentHwPortControllerDtos.removeAll(hwPortControllerDtos);
}
}
MqttRpcDataMessage resetMqttRpcDataMessage = MqttRpcDataMessage.builder()
.sendTime(System.currentTimeMillis())
.method("controll_4_merge")
.params(JSONUtil.toJsonStr(persistentHwPortControllerDtos)).build();
persistentFileService.flushRpcDataToFile(resetMqttRpcDataMessage);
}
// response
ObjectNode paramsNode = newNode();
paramsNode.put("code", "1");
paramsNode.put("msg", "success");
paramsNode.put("status", "success");
byte[] msgData = toBytes(newNode().put("requestId", bizRequestId).put("method", method)
.put("resTime", System.currentTimeMillis()).put("response", paramsNode.toString()));
persistMessage(DEVICE_RPC_RES_TOPIC + "/" + requestId, msgIdSeq.incrementAndGet(), msgData, null,
error ->
log.warn("Could not publish control reset res", error));
} catch (Exception e) {
log.error("APQ_HWPORT ERROR: {}", e.getMessage());
log.error("Failed to process rpc command persistent : {}", message, e);
ObjectNode paramsNode = newNode();
paramsNode.put("code", "0");
paramsNode.put("msg", "fail");
paramsNode.put("status", "fail");
byte[] msgData = toBytes(newNode().put("requestId", bizRequestId).put("method", method)
.put("resTime", System.currentTimeMillis()).put("response", paramsNode.toString()));
persistMessage(DEVICE_RPC_RES_TOPIC + "/" + requestId, msgIdSeq.incrementAndGet(), msgData, null,
error ->
log.warn("Could not publish control reset res", error));
} finally {
result = IHwPortController.instanceDll.APQ_HWPORT_Uninitialize();
log.info("APQ_HWPORT_Uninitialize ret:{}", result);
}
} else {
log.info("未获取到获取硬件RESET监控配置");
}
}
}
/**
* 远程RPC处理
*
* @param message
* @param requestId
* @param mqttRpcDataMessage
*/
private void remoteControlHandler(String message, int requestId, String bizRequestId, MqttRpcDataMessage
mqttRpcDataMessage) {
String method = mqttRpcDataMessage.getMethod();
if (!"remote_control".equals(method) && !"remote_control_exit".equals(method) && !"remote_control_accept".equals(method)) {
return;
}
try {
if ("remote_control".equals(method)) {// 远程控制请求
log.info("收到远程控制请求!!!"); log.info("收到远程控制请求!!!");
if (StrUtil.equals("RUNNING", remoteControlController.vncServerIsRunning())) { if (StrUtil.equals("RUNNING", remoteControlController.vncServerIsRunning())) {
log.warn("VNC Server 已在运行中,忽略此次请求"); log.warn("VNC Server 已在运行中,忽略此次请求");
...@@ -401,14 +738,12 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall ...@@ -401,14 +738,12 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall
SysConfigUtil.saveProperty("control.request", "-1"); SysConfigUtil.saveProperty("control.request", "-1");
remoteControlController.startVncServer(0); remoteControlController.startVncServer(0);
} }
return;
} }
if ("remote_control_exit".equals(mqttRpcDataMessage.getMethod())) { if ("remote_control_exit".equals(method)) {
log.info("退出远程控制!!!"); log.info("退出远程控制!!!");
remoteControlController.stopVncServer(); remoteControlController.stopVncServer();
return;
} }
if ("remote_control_accept".equals(mqttRpcDataMessage.getMethod())) { if ("remote_control_accept".equals(method)) {
log.info("远程控制请求接受!!! params: {}", mqttRpcDataMessage.getParams()); log.info("远程控制请求接受!!! params: {}", mqttRpcDataMessage.getParams());
if (StrUtil.equals("RUNNING", remoteControlController.vncServerIsRunning())) { if (StrUtil.equals("RUNNING", remoteControlController.vncServerIsRunning())) {
log.warn("VNC Server 已在运行中,忽略此次请求"); log.warn("VNC Server 已在运行中,忽略此次请求");
...@@ -417,22 +752,95 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall ...@@ -417,22 +752,95 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall
Long minutes = Convert.toLong(mqttRpcDataMessage.getParams()); Long minutes = Convert.toLong(mqttRpcDataMessage.getParams());
R<Void> startVncResult = remoteControlController.startVncServer(minutes); R<Void> startVncResult = remoteControlController.startVncServer(minutes);
log.info("远程控制请求接受!!! startVncResult: {}", startVncResult.getMsg()); log.info("远程控制请求接受!!! startVncResult: {}", startVncResult.getMsg());
return;
} }
} }
// response
ObjectNode paramsNode = newNode();
paramsNode.put("code", "1");
paramsNode.put("msg", "success");
paramsNode.put("status", "success");
byte[] msgData = toBytes(newNode().put("requestId", bizRequestId).put("method", method)
.put("resTime", System.currentTimeMillis()).put("response", paramsNode.toString()));
persistMessage(DEVICE_RPC_RES_TOPIC + "/" + requestId, msgIdSeq.incrementAndGet(), msgData, null,
error ->
log.warn("Could not publish remoteControl res", error));
} catch (Exception e) {
log.error("Failed to process rpc command persistent : {}", message, e);
ObjectNode paramsNode = newNode();
paramsNode.put("code", "0");
paramsNode.put("msg", "fail");
paramsNode.put("status", "fail");
byte[] msgData = toBytes(newNode().put("requestId", bizRequestId).put("method", method)
.put("resTime", System.currentTimeMillis()).put("response", paramsNode.toString()));
persistMessage(DEVICE_RPC_RES_TOPIC + "/" + requestId, msgIdSeq.incrementAndGet(), msgData, null,
error ->
log.warn("Could not publish remoteControl res", error));
}
}
/**
* 数据更新频率变为一秒刷新一次 / 扫描软件请求
*
* @param message
* @param requestId
* @param mqttRpcDataMessage
*/
private void realDataMonitorScanHandler(String message, int requestId, String bizRequestId, MqttRpcDataMessage
mqttRpcDataMessage) {
String method = mqttRpcDataMessage.getMethod();
if (!"real_data_monitor".equals(method) && !"facility_scan".equals(method)) {
return;
}
try {
// 数据更新频率变为一秒刷新一次 // 数据更新频率变为一秒刷新一次
if ("real_data_monitor".equals(mqttRpcDataMessage.getMethod()) && !realDataMonitor) { if ("real_data_monitor".equals(method) && !realDataMonitor) {
realDataMonitor = true; realDataMonitor = true;
log.info("数据上报频率请求接受!!! params: {}", mqttRpcDataMessage.getParams()); log.info("数据上报频率请求接受!!! params: {}", mqttRpcDataMessage.getParams());
realDataMonitorScheduler(mqttRpcDataMessage); realDataMonitorScheduler(mqttRpcDataMessage);
} }
if ("facility_scan".equals(mqttRpcDataMessage.getMethod())) { if ("facility_scan".equals(method)) {
log.info("收到平台扫描软件请求"); log.info("收到平台扫描软件请求");
programController.addProgram2Platform(); programController.addProgram2Platform();
return;
} }
if ("remote_rtc".equals(mqttRpcDataMessage.getMethod())) { ObjectNode paramsNode = newNode();
paramsNode.put("code", "1");
paramsNode.put("msg", "success");
paramsNode.put("status", "success");
byte[] msgData = toBytes(newNode().put("requestId", bizRequestId).put("method", method)
.put("resTime", System.currentTimeMillis()).put("response", paramsNode.toString()));
persistMessage(DEVICE_RPC_RES_TOPIC + "/" + requestId, msgIdSeq.incrementAndGet(), msgData, null,
error ->
log.warn("Could not publish realDataMonitorSca res", error));
} catch (Exception e) {
log.error("Failed to process rpc command persistent : {}", message, e);
ObjectNode paramsNode = newNode();
paramsNode.put("code", "0");
paramsNode.put("msg", "fail");
paramsNode.put("status", "fail");
byte[] msgData = toBytes(newNode().put("requestId", bizRequestId).put("method", method)
.put("resTime", System.currentTimeMillis()).put("response", paramsNode.toString()));
persistMessage(DEVICE_RPC_RES_TOPIC + "/" + requestId, msgIdSeq.incrementAndGet(), msgData, null,
error ->
log.warn("Could not publish realDataMonitorSca res", error));
}
}
/**
* 收到语音通话请求
*
* @param message
* @param requestId
* @param mqttRpcDataMessage
*/
private void remoteRtcHandler(String message, int requestId, String bizRequestId, MqttRpcDataMessage
mqttRpcDataMessage) {
String method = mqttRpcDataMessage.getMethod();
if (!"remote_rtc".equals(method)) {
return;
}
try {
if ("remote_rtc".equals(method)) {
log.info("收到语音通话请求"); log.info("收到语音通话请求");
try { try {
boolean hasApqExeProcess = WinExecuteUtils.findProcess("apq.exe"); boolean hasApqExeProcess = WinExecuteUtils.findProcess("apq.exe");
...@@ -445,12 +853,27 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall ...@@ -445,12 +853,27 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall
log.error("语音通话请求异常", e); log.error("语音通话请求异常", e);
SysConfigUtil.saveProperty("control.request", "0"); SysConfigUtil.saveProperty("control.request", "0");
} }
return; ObjectNode paramsNode = newNode();
paramsNode.put("code", "1");
paramsNode.put("msg", "success");
paramsNode.put("status", "success");
byte[] msgData = toBytes(newNode().put("requestId", bizRequestId).put("method", method)
.put("resTime", System.currentTimeMillis()).put("response", paramsNode.toString()));
persistMessage(DEVICE_RPC_RES_TOPIC + "/" + requestId, msgIdSeq.incrementAndGet(), msgData, null,
error ->
log.warn("Could not publish remoteRtc res", error));
} }
persistentFileService.flushRpcDataToFile(mqttRpcDataMessage);
} catch (Exception e) { } catch (Exception e) {
log.error("Failed to process rpc command persistent : {}", message, e); log.error("Failed to process rpc command persistent : {}", message, e);
ObjectNode paramsNode = newNode();
paramsNode.put("code", "0");
paramsNode.put("msg", "fail");
paramsNode.put("status", "fail");
byte[] msgData = toBytes(newNode().put("requestId", bizRequestId).put("method", method)
.put("resTime", System.currentTimeMillis()).put("response", paramsNode.toString()));
persistMessage(DEVICE_RPC_RES_TOPIC + "/" + requestId, msgIdSeq.incrementAndGet(), msgData, null,
error ->
log.warn("Could not publish remoteRtc res", error));
} }
} }
...@@ -906,4 +1329,14 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall ...@@ -906,4 +1329,14 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall
//return mqttClientSecurityConfiguration; //return mqttClientSecurityConfiguration;
return null; return null;
} }
public static void main(String[] args) {
ObjectNode paramsNode = newNode();
paramsNode.put("code", "0");
paramsNode.put("msg", "fail");
paramsNode.put("status", "fail");
JSONObject jsonObject = JSONUtil.parseObj(paramsNode.toPrettyString());
System.out.println(jsonObject.getStr("msg"));
}
} }
...@@ -9,7 +9,9 @@ import lombok.Data; ...@@ -9,7 +9,9 @@ import lombok.Data;
public class RpcCommandResponse { public class RpcCommandResponse {
private int requestId; private int requestId;
private String bizRequestId;
private String deviceName; private String deviceName;
private String method;
private String data; private String data;
} }
apq: apq:
iot-gateway: 192.168.124.19:7002 iot-gateway: 192.168.124.19:7002
webrtc_path: https://ceshi.priusis.com:8443
client: client:
productId: 210 productId: 210
tenantId: 156 tenantId: 156
......
...@@ -16,6 +16,7 @@ public class MqttRpcDataMessage implements Serializable { ...@@ -16,6 +16,7 @@ public class MqttRpcDataMessage implements Serializable {
private static final long serialVersionUID = -3133461476074777891L; private static final long serialVersionUID = -3133461476074777891L;
private int requestId; private int requestId;
private String bizRequestId;
private String method; private String method;
private Long sendTime; private Long sendTime;
private String params; private String params;
......
package com.priusis.job; package com.priusis.job;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.priusis.client.service.MqttRpcDataMessage; import com.priusis.client.service.MqttRpcDataMessage;
...@@ -78,10 +77,11 @@ public class ApqControlJob { ...@@ -78,10 +77,11 @@ public class ApqControlJob {
// 获取硬件监控配置 params == data // 获取硬件监控配置 params == data
ResponseEntity<MqttRpcDataMessage> forEntity = null; ResponseEntity<MqttRpcDataMessage> forEntity = null;
try { try {
forEntity = restTemplate.getForEntity("http://localhost:8765/rpc_cmd/controll", MqttRpcDataMessage.class); forEntity = restTemplate.getForEntity("http://localhost:8765/rpc_cmd/controll_4_merge", MqttRpcDataMessage.class);
} catch (Exception e) { } catch (Exception e) {
log.error("硬件监控上报异常", e.getMessage()); log.error("硬件监控上报异常", e.getMessage());
} }
if (null != forEntity) { if (null != forEntity) {
MqttRpcDataMessage body = forEntity.getBody(); MqttRpcDataMessage body = forEntity.getBody();
String params = body.getParams(); String params = body.getParams();
...@@ -90,164 +90,81 @@ public class ApqControlJob { ...@@ -90,164 +90,81 @@ public class ApqControlJob {
int result = IHwPortController.instanceDll.APQ_HWPORT_Initialize(); int result = IHwPortController.instanceDll.APQ_HWPORT_Initialize();
log.info("APQ_HWPORT_Initialize ret:{}", result); log.info("APQ_HWPORT_Initialize ret:{}", result);
Long sendTime = body.getSendTime();
List<HwPortControllerDto> hwPortControllerDtos = JSONUtil.toList(params, HwPortControllerDto.class);
try { try {
Long sendTime = body.getSendTime(); log.info("执行硬件监控, sendTime:{}, params:{}", sendTime, params);
long current = System.currentTimeMillis();
List<HwPortControllerDto> hwPortControllerDtos = JSONUtil.toList(params, HwPortControllerDto.class); // 上报硬件监控数据
Map mapRequest = new HashMap();
// 合并硬件请求检查
// 先获取数据 for (HwPortControllerDto hwPortControllerDto : hwPortControllerDtos) {
// 获取硬件监控配置 params == data HwPortControllerDto.DeviceHardwareEnum deviceHardwareEnum = hwPortControllerDto.getKey();
ResponseEntity<MqttRpcDataMessage> persistentEntity = null; int doType = hwPortControllerDto.getDoType();
try { int limitType = hwPortControllerDto.getLimitType();
persistentEntity = restTemplate.getForEntity("http://localhost:8765/rpc_cmd/controll_4_merge", MqttRpcDataMessage.class); int value = hwPortControllerDto.getValue();
} catch (Exception e) {
log.error("硬件监控上报异常merge", e.getMessage()); List<Integer> hwDeviceIds = deviceHardwareEnum.getHwDeviceIds();
} String hwDeviceName = deviceHardwareEnum.getName();
List<HwPortControllerDto> persistentHwPortControllerDtos = null; // 设置普通设备权限
if (null != persistentEntity) { if (Objects.equals(deviceHardwareEnum.getHwGroup(), "Normal")) {
MqttRpcDataMessage persistentEntityBody = persistentEntity.getBody(); // 1F/2T
String persistentEntityParams = persistentEntityBody.getParams(); for (Integer hwDeviceId : hwDeviceIds) {
int perm = (doType == 1 ? 2 : 1);
if (StrUtil.isNotBlank(persistentEntityParams)) { if (perm == 1) {
persistentHwPortControllerDtos = JSONUtil.toList(persistentEntityParams, HwPortControllerDto.class); // 获取普通设备权限
persistentHwPortControllerDtos.removeAll(hwPortControllerDtos); int result31 = IHwPortController.instanceDll.APQ_HWPORT_get_normal_device_permit(hwDeviceId);
persistentHwPortControllerDtos.addAll(hwPortControllerDtos); log.debug("APQ_HWPORT_get_normal_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}",
} doType, limitType, value, hwDeviceId, hwDeviceName, perm, result31);
} else { if (result31 == 2) {
persistentHwPortControllerDtos = hwPortControllerDtos; mapRequest.put(deviceHardwareEnum.name(), result31);
}
MqttRpcDataMessage mqttRpcDataMessage = MqttRpcDataMessage.builder()
.sendTime(System.currentTimeMillis())
.method("controll_4_merge")
.params(JSONUtil.toJsonStr(persistentHwPortControllerDtos)).build();
restTemplate.postForObject("http://localhost:8765/rpc_cmd", mqttRpcDataMessage, String.class);
if (current - sendTime <= FIXED_DELAY && CollUtil.isNotEmpty(hwPortControllerDtos)) {
// 收到硬件策略下发请求
log.info("收到硬件策略下发请求, sendTime:{}, params:{}", sendTime, params);
for (HwPortControllerDto hwPortControllerDto : hwPortControllerDtos) {
HwPortControllerDto.DeviceHardwareEnum deviceHardwareEnum = hwPortControllerDto.getKey();
int doType = hwPortControllerDto.getDoType();
int limitType = hwPortControllerDto.getLimitType();
int value = hwPortControllerDto.getValue();
List<Integer> hwDeviceIds = deviceHardwareEnum.getHwDeviceIds();
String hwDeviceName = deviceHardwareEnum.getName();
// 设置普通设备权限
if (Objects.equals(deviceHardwareEnum.getHwGroup(), "Normal")) {
// 1F/2T
for (Integer hwDeviceId : hwDeviceIds) {
int perm = (doType == 1 ? 2 : 1);
int result32 = IHwPortController.instanceDll.APQ_HWPORT_set_normal_device_permit(hwDeviceId, perm, null);
log.info("APQ_HWPORT_set_normal_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}",
doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32);
}
} else if (Objects.equals(deviceHardwareEnum.getHwGroup(), "Storage")) { // 设置存储设备权限
// 1F/2T/3T-ALL/4T-R/5T-CI/6T-CO 拷出目前无用!! Storage移动硬盘,TYPEC 无效 !!
for (Integer hwDeviceId : hwDeviceIds) {
int perm = (doType == 1 ? 2 : 1);
if (perm == 2) {
// limitType 1读写 2只读 3拷入 4拷出 5不限速 6限速
perm = (limitType == 1 ? 3 : limitType == 2 ? 4 : limitType == 3 ? 5 : limitType == 4 ? 6 : 3);
} }
int result32 = IHwPortController.instanceDll.APQ_HWPORT_set_storage_device_permit(hwDeviceId, perm, null);
log.info("APQ_HWPORT_set_storage_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}",
doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32);
}
} else if (Objects.equals(deviceHardwareEnum.getHwGroup(), "NET")) { // 设置网络设备权限
// 1F/2T/3T-NS/4T-S-200 网口,4G/5G模块,无线WIFI区分不了 !!
for (Integer hwDeviceId : hwDeviceIds) {
int perm = (doType == 1 ? 2 : 1);
if (perm == 2) {
// limitType 1读写 2只读 3拷入 4拷出 5不限速 6限速
perm = (limitType == 5 ? 3 : limitType == 6 ? 4 : 2);
}
int result32 = IHwPortController.instanceDll.APQ_HWPORT_set_net_device_permit(hwDeviceId, perm, value, null);
log.info("APQ_HWPORT_set_net_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}",
doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32);
} }
} }
} else if (Objects.equals(deviceHardwareEnum.getHwGroup(), "Storage")) { // 设置存储设备权限
// 应用硬件接口管理模块的配置内容 // 1F/2T/3T-ALL/4T-R/5T-CI/6T-CO 拷出目前无用!! Storage移动硬盘,TYPEC 无效 !!
int result5 = IHwPortController.instanceDll.APQ_HWPORT_Apply(); for (Integer hwDeviceId : hwDeviceIds) {
log.info("APQ_HWPORT_Apply ret:{}", result5); int perm = (doType == 1 ? 2 : 1);
} if (perm == 2) {
// limitType 1读写 2只读 3拷入 4拷出 5不限速 6限速存在硬件接口扫描告警
} else { perm = (limitType == 1 ? 3 : limitType == 2 ? 4 : limitType == 3 ? 5 : limitType == 4 ? 6 : 3);
log.info("执行硬件监控, sendTime:{}, params:{}", sendTime, params);
// 上报硬件监控数据
Map mapRequest = new HashMap();
for (HwPortControllerDto hwPortControllerDto : persistentHwPortControllerDtos) {
HwPortControllerDto.DeviceHardwareEnum deviceHardwareEnum = hwPortControllerDto.getKey();
int doType = hwPortControllerDto.getDoType();
int limitType = hwPortControllerDto.getLimitType();
int value = hwPortControllerDto.getValue();
List<Integer> hwDeviceIds = deviceHardwareEnum.getHwDeviceIds();
String hwDeviceName = deviceHardwareEnum.getName();
// 设置普通设备权限
if (Objects.equals(deviceHardwareEnum.getHwGroup(), "Normal")) {
// 1F/2T
for (Integer hwDeviceId : hwDeviceIds) {
int perm = (doType == 1 ? 2 : 1);
if (perm == 1) {
// 获取普通设备权限
int result31 = IHwPortController.instanceDll.APQ_HWPORT_get_normal_device_permit(hwDeviceId);
log.debug("APQ_HWPORT_get_normal_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}",
doType, limitType, value, hwDeviceId, hwDeviceName, perm, result31);
if (result31 == 2) {
mapRequest.put(deviceHardwareEnum.name(), result31);
}
}
} }
} else if (Objects.equals(deviceHardwareEnum.getHwGroup(), "Storage")) { // 设置存储设备权限
// 1F/2T/3T-ALL/4T-R/5T-CI/6T-CO 拷出目前无用!! Storage移动硬盘,TYPEC 无效 !!
for (Integer hwDeviceId : hwDeviceIds) {
int perm = (doType == 1 ? 2 : 1);
if (perm == 2) {
// limitType 1读写 2只读 3拷入 4拷出 5不限速 6限速存在硬件接口扫描告警
perm = (limitType == 1 ? 3 : limitType == 2 ? 4 : limitType == 3 ? 5 : limitType == 4 ? 6 : 3);
}
int result32 = IHwPortController.instanceDll.APQ_HWPORT_get_storage_device_permit(hwDeviceId); int result32 = IHwPortController.instanceDll.APQ_HWPORT_get_storage_device_permit(hwDeviceId);
log.info("APQ_HWPORT_get_storage_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}", log.info("APQ_HWPORT_get_storage_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}",
doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32); doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32);
if (perm != result32) { if (perm != result32) {
mapRequest.put(deviceHardwareEnum.name(), result32); mapRequest.put(deviceHardwareEnum.name(), result32);
}
} }
} else if (Objects.equals(deviceHardwareEnum.getHwGroup(), "NET")) { // 设置网络设备权限 }
// 1F/2T/3T-NS/4T-S-200 网口,4G/5G模块,无线WIFI区分不了 !! } else if (Objects.equals(deviceHardwareEnum.getHwGroup(), "NET")) { // 设置网络设备权限
for (Integer hwDeviceId : hwDeviceIds) { // 1F/2T/3T-NS/4T-S-200 网口,4G/5G模块,无线WIFI区分不了 !!
int perm = (doType == 1 ? 2 : 1); for (Integer hwDeviceId : hwDeviceIds) {
if (perm == 2) { int perm = (doType == 1 ? 2 : 1);
// limitType 1读写 2只读 3拷入 4拷出 5不限速 6限速 if (perm == 2) {
perm = (limitType == 5 ? 3 : limitType == 6 ? 4 : 2); // limitType 1读写 2只读 3拷入 4拷出 5不限速 6限速
} perm = (limitType == 5 ? 3 : limitType == 6 ? 4 : 2);
int result32 = IHwPortController.instanceDll.APQ_HWPORT_get_net_device_permit(hwDeviceId, 0); }
log.info("APQ_HWPORT_get_net_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}", int result32 = IHwPortController.instanceDll.APQ_HWPORT_get_net_device_permit(hwDeviceId, 0);
doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32); log.info("APQ_HWPORT_get_net_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}",
if (perm != result32) { doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32);
mapRequest.put(deviceHardwareEnum.name(), result32); if (perm != result32) {
} mapRequest.put(deviceHardwareEnum.name(), result32);
} }
} }
} }
}
if (mapRequest.size() > 0) { if (mapRequest.size() > 0) {
Map eventMapRequest = new HashMap(); Map eventMapRequest = new HashMap();
eventMapRequest.put("requestId", 3); eventMapRequest.put("requestId", 3);
eventMapRequest.put("methodName", "control_warning"); eventMapRequest.put("methodName", "control_warning");
eventMapRequest.put("params", mapRequest); eventMapRequest.put("params", mapRequest);
Map map = restTemplate.postForObject("http://localhost:8765/uplink_event/oc-client", eventMapRequest, Map.class); Map map = restTemplate.postForObject("http://localhost:8765/uplink_event/oc-client", eventMapRequest, Map.class);
log.info("存在硬件接口扫描告警,上报告警事件: mapData:{}, ret:{}", mapRequest, map); log.info("存在硬件接口扫描告警,上报告警事件: mapData:{}, ret:{}", mapRequest, map);
}
} }
} catch (Exception e) {
log.error("APQ_HWPORT ERROR: {}", e.getMessage());
} finally { } finally {
result = IHwPortController.instanceDll.APQ_HWPORT_Uninitialize(); result = IHwPortController.instanceDll.APQ_HWPORT_Uninitialize();
log.info("APQ_HWPORT_Uninitialize ret:{}", result); log.info("APQ_HWPORT_Uninitialize ret:{}", result);
......
...@@ -44,33 +44,48 @@ public class DeviceChangeCallbackImpl implements IDeviceChangeCallback { ...@@ -44,33 +44,48 @@ public class DeviceChangeCallbackImpl implements IDeviceChangeCallback {
if (changeDataSplits.length >= 5) { if (changeDataSplits.length >= 5) {
String classData = changeDataSplits[4]; String classData = changeDataSplits[4];
String changeDataDesc = changeDataSplits[0]; String changeDataDesc = changeDataSplits[0];
boolean needPush = true;
String deviceClass = classData.split("=")[1].toUpperCase();
if (StrUtil.equalsIgnoreCase("class=Keyboard", classData)) { if (StrUtil.equalsIgnoreCase("class=Keyboard", classData)) {
changeDataDesc = "键盘"; changeDataDesc = "键盘";
} else if (StrUtil.equalsIgnoreCase("class=Mouse", classData)) { } else if (StrUtil.equalsIgnoreCase("class=Mouse", classData)) {
changeDataDesc = "鼠标"; changeDataDesc = "鼠标";
} else if (StrUtil.equalsIgnoreCase("class=DiskDrive", classData)) { } else if (StrUtil.equalsIgnoreCase("class=Bluetooth", classData)) {
changeDataDesc = "USB"; changeDataDesc = "无线蓝牙";
} else if (StrUtil.equalsIgnoreCase("class=CDROM", classData)) {
changeDataDesc = "光驱";
deviceClass = "CD_DRIVE";
} else if (StrUtil.equalsIgnoreCase("class=Ports", classData)) {
changeDataDesc = "串口";
deviceClass = "SERIAL_PORT";
} else if (StrUtil.equalsIgnoreCase("class=USB", classData)) {
changeDataDesc = "U盘/移动硬盘";
deviceClass = "USB_DRIVE";
List<String> addUSBs = USBCheck.getAddUSB(); List<String> addUSBs = USBCheck.getAddUSB();
if (null != addUSBs) { if (null != addUSBs) {
for (String addUSB : addUSBs) { for (String addUSB : addUSBs) {
antivirusDoService.doAntivirus(addUSB + ":"); antivirusDoService.doAntivirus(addUSB + ":");
} }
} }
} else {
needPush = false;
} }
String changeContent = String.format("%s%s", changeType == 1 ? "插入" : "拔出", changeDataDesc); String changeContent = String.format("%s%s", changeType == 1 ? "插入" : "拔出", changeDataDesc);
mapRequest.put("deviceClass", classData.split("=")[1]); mapRequest.put("deviceClass", deviceClass);
mapRequest.put("changeContent", changeContent); mapRequest.put("changeContent", changeContent);
mapRequest.put("changeRemark", changeData); mapRequest.put("changeRemark", changeData);
log.info("存在硬件接口扫描告警,上报告警事件!changeContent: {}, changeRemark: {}", changeContent, changeData); log.info("存在硬件接口扫描告警,上报告警事件!changeContent: {}, changeRemark: {}", changeContent, changeData);
Map eventMapRequest = new HashMap(); if (needPush) {
eventMapRequest.put("requestId", 4); Map eventMapRequest = new HashMap();
eventMapRequest.put("methodName", "control_dev_warning"); eventMapRequest.put("requestId", 4);
eventMapRequest.put("params", mapRequest); eventMapRequest.put("methodName", "control_dev_warning");
Map map = restTemplate.postForObject("http://localhost:8765/uplink_event/oc-client", eventMapRequest, Map.class); eventMapRequest.put("params", mapRequest);
log.info("存在硬件接口扫描告警,上报告警事件: mapData:{}, ret:{}", mapRequest, map); Map map = restTemplate.postForObject("http://localhost:8765/uplink_event/oc-client", eventMapRequest, Map.class);
log.info("存在硬件接口扫描告警,上报告警事件: mapData:{}, ret:{}", mapRequest, map);
}
} }
} }
} }
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
#define MyAppVersion "V1.3.36" #define MyAppVersion "V1.3.36"
#define MyAppPublisher "阿普奇" #define MyAppPublisher "阿普奇"
#define MyAppURL "https://www.apq.com/" #define MyAppURL "https://www.apq.com/"
#define MyAppDirName "apq-client" #define MyAppDirName "apq-client"
#define MyAppEnName "apq-client" #define MyAppEnName "apq-client"
#define MyAppExeName "apq-client.exe" #define MyAppExeName "apq-client.exe"
; apq-iot-client ; apq-iot-client
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论