diff --git a/src/main/java/com/xydl/cac/controller/TestController.java b/src/main/java/com/xydl/cac/controller/TestController.java index fd6a2b7..61a2a2d 100644 --- a/src/main/java/com/xydl/cac/controller/TestController.java +++ b/src/main/java/com/xydl/cac/controller/TestController.java @@ -1,5 +1,7 @@ package com.xydl.cac.controller; +import com.xydl.cac.iec.IecClient; +import com.xydl.cac.iec.RealTimeDataService; import com.xydl.cac.model.Response; import com.xydl.cac.service.IcdFileConfigService; import com.xydl.cac.socket.WebSocketServer; @@ -11,6 +13,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import java.util.HashMap; import java.util.List; @RestController @@ -23,6 +26,8 @@ public class TestController extends BasicController { IcdFileConfigService configService; @Resource WebSocketServer webSocketServer; + @Resource + RealTimeDataService realTimeDataService; @GetMapping("compare61850") @ApiOperation("比对61850的不同点") @@ -36,4 +41,10 @@ public class TestController extends BasicController { public void sendMsg(String msg, Integer warningId) { webSocketServer.sendMessage(msg, warningId); } + + @GetMapping("realTimeMap") + @ApiOperation("实时订阅Map") + public Response> realTimeMap() { + return Response.success(realTimeDataService.clientMap); + } } diff --git a/src/main/java/com/xydl/cac/iec/IecClient.java b/src/main/java/com/xydl/cac/iec/IecClient.java index 764d48a..865aaaf 100644 --- a/src/main/java/com/xydl/cac/iec/IecClient.java +++ b/src/main/java/com/xydl/cac/iec/IecClient.java @@ -19,16 +19,24 @@ import java.util.List; @Slf4j public class IecClient implements ClientEventListener { - IcdIed ied; + public IcdIed ied; int[] title; ClientSap clientSap = new ClientSap(); ClientAssociation clientAssociation = null; ServerModel serverModel; public boolean keep = false; - public RealTimeDataService realTimeDataService; - public WebSocketServer webSocketServer; - int retry = 10; + private RealTimeDataService realTimeDataService; + private WebSocketServer webSocketServer; + public int retry = 10; + + public IecClient() { + } + + public IecClient(RealTimeDataService _realTimeDataService, WebSocketServer _webSocketServer) { + realTimeDataService = _realTimeDataService; + webSocketServer = _webSocketServer; + } public void connect(IcdIed _ied, String xml) throws Exception { InputStream in = IOUtils.toInputStream(xml, StandardCharsets.UTF_8); diff --git a/src/main/java/com/xydl/cac/iec/RealTimeDataService.java b/src/main/java/com/xydl/cac/iec/RealTimeDataService.java index efe81da..43cee2c 100644 --- a/src/main/java/com/xydl/cac/iec/RealTimeDataService.java +++ b/src/main/java/com/xydl/cac/iec/RealTimeDataService.java @@ -29,7 +29,7 @@ public class RealTimeDataService { WebSocketServer webSocketServer; public static boolean inDoing = false; - HashMap clientMap = new HashMap<>(); + public HashMap clientMap = new HashMap<>(); @PostConstruct private void init() { @@ -57,12 +57,10 @@ public class RealTimeDataService { inDoing = true; IcdFile icdFile = optionalFile.get(); try { - IecClient iecClient = new IecClient(); + IecClient iecClient = new IecClient(this, webSocketServer); iecClient.connect(ied, icdFile.getXml()); iecClient.enableReporting(); iecClient.keep = true; - iecClient.realTimeDataService = this; - iecClient.webSocketServer = webSocketServer; ied.setStart(Constants.TRUE); iedRepository.save(ied); clientMap.put(ied.getId(), iecClient); @@ -90,8 +88,6 @@ public class RealTimeDataService { IecClient iecClient = clientMap.get(iedId); if (iecClient != null) { iecClient.keep = false; - iecClient.realTimeDataService = null; - iecClient.webSocketServer = null; iecClient.disableReporting(); iecClient.disconnect(); clientMap.remove(iedId);