# update 权限相关
This commit is contained in:
@@ -62,10 +62,11 @@ public class WebMiddlewareController extends BaseController {
|
||||
List<String> nettyClients = new ArrayList<>();
|
||||
MiddleGlobalMemory.nettyClientMap.values().forEach(x -> {
|
||||
if (x != null) {
|
||||
nettyClients.add(x.userName +":"+ x.token);
|
||||
nettyClients.add(x.userName + ":" + x.token);
|
||||
}
|
||||
});
|
||||
res.put("nettyClientMap", nettyClients);
|
||||
res.put("controllerMap", deviceSessionManager.getControllerMap());
|
||||
res.put("siteMemory", GlobalMemory.getAllSiteMemory());
|
||||
return AjaxResult.success(res);
|
||||
}
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package com.maibu.memory;
|
||||
|
||||
|
||||
import com.maibu.utils.spring.SpringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.annotation.PreDestroy;
|
||||
import java.lang.management.ManagementFactory;
|
||||
import java.lang.management.OperatingSystemMXBean;
|
||||
import java.lang.management.ThreadMXBean;
|
||||
@@ -19,6 +21,8 @@ import java.util.concurrent.TimeUnit;
|
||||
public class SystemMonitor {
|
||||
private final Logger logger = LoggerFactory.getLogger(SystemMonitor.class);
|
||||
|
||||
private ScheduledExecutorService executor = SpringUtils.getBean("scheduledExecutorService");
|
||||
|
||||
// 启动监控任务
|
||||
@PostConstruct
|
||||
public void startMonitoring() {
|
||||
@@ -37,7 +41,6 @@ public class SystemMonitor {
|
||||
|
||||
// 内存监控
|
||||
private void startMemoryMonitor() {
|
||||
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
|
||||
executor.scheduleAtFixedRate(() -> {
|
||||
Runtime runtime = Runtime.getRuntime();
|
||||
long totalMemory = runtime.totalMemory() / (1024 * 1024);
|
||||
@@ -59,7 +62,6 @@ public class SystemMonitor {
|
||||
|
||||
// CPU 监控
|
||||
private void startCpuMonitor() {
|
||||
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
|
||||
executor.scheduleAtFixedRate(() -> {
|
||||
try {
|
||||
// 使用 OperatingSystemMXBean 获取 CPU 使用率
|
||||
@@ -84,7 +86,6 @@ public class SystemMonitor {
|
||||
|
||||
// 线程监控
|
||||
private void startThreadMonitor() {
|
||||
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
|
||||
executor.scheduleAtFixedRate(() -> {
|
||||
ThreadMXBean threadBean = ManagementFactory.getThreadMXBean();
|
||||
int threadCount = threadBean.getThreadCount();
|
||||
@@ -105,7 +106,6 @@ public class SystemMonitor {
|
||||
|
||||
// 连接数监控
|
||||
private void startConnectionMonitor() {
|
||||
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
|
||||
executor.scheduleAtFixedRate(() -> {
|
||||
int webSocketCount = MiddleGlobalMemory.onlineSockets.size();
|
||||
int nettyClientCount = MiddleGlobalMemory.nettyClientMap.size();
|
||||
@@ -114,4 +114,5 @@ public class SystemMonitor {
|
||||
webSocketCount, nettyClientCount);
|
||||
}, 1, 5, TimeUnit.MINUTES);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.maibu.core.business.dto.WebStatusMessageDTO;
|
||||
@@ -63,10 +64,10 @@ public class ClientHandler extends ChannelInboundHandlerAdapter {
|
||||
ctx.writeAndFlush(data);
|
||||
}
|
||||
NettyClient nettyClient = MiddleGlobalMemory.nettyClientMap.get(key);
|
||||
if (nettyClient != null && StringUtils.isEmpty(nettyClient.currentDeviceId)) {
|
||||
if (nettyClient != null) {
|
||||
if (nettyClient.lastSwitchTime == -1
|
||||
|| System.currentTimeMillis() - nettyClient.lastSwitchTime > nettyClient.Interval) {
|
||||
if (!StringUtils.isEmpty(nettyClient.requestDeviceId) && !StringUtils.isEmpty(key)) {
|
||||
if (!StringUtils.isEmpty(nettyClient.requestDeviceId) && !StringUtils.isEmpty(key) && !Objects.equals(nettyClient.requestDeviceId, nettyClient.currentDeviceId)) {
|
||||
switchDevice(nettyClient, key);
|
||||
nettyClient.lastSwitchTime = System.currentTimeMillis();
|
||||
}
|
||||
@@ -138,7 +139,7 @@ public class ClientHandler extends ChannelInboundHandlerAdapter {
|
||||
}
|
||||
} else {
|
||||
/* 判断 respond 字段 */
|
||||
if (obj.get("request") != null) {
|
||||
if (obj.get("request") != null && !"null".equals(obj.get("request").toString())) {
|
||||
String deviceId = obj.get("deviceId").toString();
|
||||
String userName = obj.get("userId").toString();
|
||||
String platform = obj.get("platform").toString();
|
||||
@@ -151,7 +152,7 @@ public class ClientHandler extends ChannelInboundHandlerAdapter {
|
||||
logger.debug("json: {}", JsonUtils.toJsonString(request));
|
||||
WebsocketHandler.sendMessageToClient(webSocket, JsonUtils.toJsonString(request));
|
||||
} else {
|
||||
if (obj.get("respond") != null) {
|
||||
if (obj.get("respond") != null && !"null".equals(obj.get("respond").toString())) {
|
||||
if ("have_logged_in".equals(obj.get("respond").toString())) {
|
||||
/* 如果回复 have_logged_in 则调用logout */
|
||||
// System.out.println("检测到重复登录,执行 logout");
|
||||
@@ -460,7 +461,9 @@ public class ClientHandler extends ChannelInboundHandlerAdapter {
|
||||
String key = ctx.channel().attr(MiddleConstant.ATT_MASTER_KEY).get();
|
||||
NettyClient nettyClient = MiddleGlobalMemory.nettyClientMap.get(key);
|
||||
// stopHeartbeat(nettyClient);
|
||||
nettyClient.currentDeviceId = null;
|
||||
if (nettyClient != null) {
|
||||
nettyClient.currentDeviceId = null;
|
||||
}
|
||||
logger.debug("连接断开channelInactive,ChannelId:{} ", ctx.channel().id().asLongText());
|
||||
WebSocket webSocket = MiddleGlobalMemory.onlineSockets.get(key);
|
||||
if (webSocket != null && webSocket.isOpen()) {
|
||||
|
||||
@@ -10,6 +10,7 @@ import com.maibu.netty.NettyClient;
|
||||
import com.maibu.utils.CommandUtils;
|
||||
import com.maibu.utils.ControlUtils;
|
||||
import com.maibu.utils.json.JsonUtils;
|
||||
import com.maibu.utils.spring.SpringUtils;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
@@ -41,7 +42,7 @@ public class WebsocketHandler extends WebSocketServer {
|
||||
// 空闲超时时间(10秒):超过10秒无消息则判定为断开
|
||||
private static final long IDLE_TIMEOUT = 10 * 1000;
|
||||
// 定时检测线程池(每隔10秒检测一次空闲连接)
|
||||
private final ScheduledExecutorService idleCheckExecutor = Executors.newSingleThreadScheduledExecutor();
|
||||
private ScheduledExecutorService executor = SpringUtils.getBean("scheduledExecutorService");
|
||||
|
||||
|
||||
public WebsocketHandler(int port) {
|
||||
@@ -81,24 +82,29 @@ public class WebsocketHandler extends WebSocketServer {
|
||||
return;
|
||||
}
|
||||
//todo 先关闭原先的
|
||||
WebSocket oldWebsocket = MiddleGlobalMemory.onlineSockets.get(key);
|
||||
NettyClient oldNettyClient = MiddleGlobalMemory.nettyClientMap.get(key);
|
||||
if (oldWebsocket != null && oldWebsocket.isOpen()) {
|
||||
oldWebsocket.close();
|
||||
}
|
||||
if (oldNettyClient != null && oldNettyClient.isConnected()) {
|
||||
oldNettyClient.disconnect();
|
||||
}
|
||||
// WebSocket oldWebsocket = MiddleGlobalMemory.onlineSockets.get(key);
|
||||
NettyClient client = MiddleGlobalMemory.nettyClientMap.get(key);
|
||||
|
||||
// if (oldWebsocket != null && oldWebsocket.isOpen()) {
|
||||
// oldWebsocket.close();
|
||||
// }
|
||||
// if (oldNettyClient != null && oldNettyClient.isConnected()) {
|
||||
// oldNettyClient.disconnect();
|
||||
// }
|
||||
MiddleGlobalMemory.onlineSockets.put(key, conn);
|
||||
//这里可以根据需要初始化Netty客户端
|
||||
NettyClient client = new NettyClient();
|
||||
if (client == null) {
|
||||
client = new NettyClient();
|
||||
}
|
||||
client.key = key;
|
||||
client.requestDeviceId = deviceId;
|
||||
client.token = token;
|
||||
client.userName = userName;
|
||||
client.initClient();
|
||||
client.initConnect(MiddleConstant.vertxIp, 9001);
|
||||
MiddleGlobalMemory.nettyClientMap.put(key, client);
|
||||
if (!client.isConnected()) {
|
||||
client.initClient();
|
||||
client.initConnect(MiddleConstant.vertxIp, 9001);
|
||||
}
|
||||
} else if (MesType.path.equals(type)) {
|
||||
//todo下发路径 预留
|
||||
pathDistribute();
|
||||
@@ -126,7 +132,7 @@ public class WebsocketHandler extends WebSocketServer {
|
||||
// else if(MesType.heartbeat.equals(type)){
|
||||
// clientActiveTimeMap.put(conn,System.currentTimeMillis());
|
||||
// }
|
||||
else if(MesType.switchPermission.equals(type)){
|
||||
else if (MesType.switchPermission.equals(type)) {
|
||||
DeviceRequestDTO requestDTO = new DeviceRequestDTO();
|
||||
requestDTO.setRequest(CommandRequestType.switch_control);
|
||||
requestDTO.setToken(token);
|
||||
@@ -136,12 +142,12 @@ public class WebsocketHandler extends WebSocketServer {
|
||||
logger.debug("Netty客户端:{}发送操控请求数据: {}", userName, JsonUtils.toJsonString(requestDTO));
|
||||
NettyClient nettyClient = MiddleGlobalMemory.nettyClientMap.get(key);
|
||||
ByteBuf buf = Unpooled.buffer();
|
||||
CommandUtils.buildCommand(buf,requestDTO, CommandConstant.interaction);
|
||||
CommandUtils.buildCommand(buf, requestDTO, CommandConstant.interaction);
|
||||
if (nettyClient != null && nettyClient.isConnected()) {
|
||||
// if (!nettyClient.isConnected()) nettyClient.connect();
|
||||
nettyClient.sendData(buf.array());
|
||||
}
|
||||
} else if(MesType.switchResult.equals(type)){
|
||||
} else if (MesType.switchResult.equals(type)) {
|
||||
DeviceRequestDTO requestDTO = new DeviceRequestDTO();
|
||||
requestDTO.setToken(token);
|
||||
requestDTO.setPlatform("web");
|
||||
@@ -154,7 +160,7 @@ public class WebsocketHandler extends WebSocketServer {
|
||||
logger.debug("Netty客户端:{}发送切换操控权请求反馈: {}", userName, JsonUtils.toJsonString(requestDTO));
|
||||
NettyClient nettyClient = MiddleGlobalMemory.nettyClientMap.get(key);
|
||||
ByteBuf buf = Unpooled.buffer();
|
||||
CommandUtils.buildCommand(buf,requestDTO, CommandConstant.interaction);
|
||||
CommandUtils.buildCommand(buf, requestDTO, CommandConstant.interaction);
|
||||
if (nettyClient != null && nettyClient.isConnected()) {
|
||||
// if (!nettyClient.isConnected()) nettyClient.connect();
|
||||
nettyClient.sendData(buf.array());
|
||||
@@ -225,7 +231,7 @@ public class WebsocketHandler extends WebSocketServer {
|
||||
|
||||
// 核心:定时检测空闲连接(每隔10秒执行一次)
|
||||
private void startIdleCheckTask() {
|
||||
idleCheckExecutor.scheduleAtFixedRate(() -> {
|
||||
executor.scheduleAtFixedRate(() -> {
|
||||
long now = System.currentTimeMillis();
|
||||
// 遍历所有连接,检测是否超时
|
||||
for (Map.Entry<WebSocket, Long> entry : clientActiveTimeMap.entrySet()) {
|
||||
|
||||
Reference in New Issue
Block a user