Browse Source

feat: 각 서버 통신 기본설정

feature/socket
지대한 7 months ago
parent
commit
c8e36fdd42
  1. 3
      app/kac-socket-app/build.gradle
  2. 53
      app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/AdsbDronCommandImpl.java
  3. 53
      app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/AntosDronCommandImpl.java
  4. 58
      app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/SandboxDronCommandImpl.java
  5. 4
      app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/config/AppReadyEvent.java
  6. 4
      app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/config/NettyConfig.java
  7. 3
      app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/socket/ChannelInitializer.java
  8. 2
      app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/socket/SocketServer.java
  9. 42
      app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/KacAppService.java
  10. 18
      app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/WebSocketService.java
  11. 4
      app/kac-socket-app/src/main/resources/application.yml
  12. 2
      app/kac-websocket-app/build.gradle
  13. 4
      app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/config/NettyConfig.java
  14. 4
      app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/socket/ChannelInitializer.java
  15. 10
      app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/service/ScheduledService.java
  16. 5
      build.gradle
  17. 16
      common/model/src/main/java/kr/co/palnet/kac/common/model/common/SimpleControlDto.java

3
app/kac-socket-app/build.gradle

@ -1,9 +1,10 @@
dependencies {
implementation "$boot:spring-boot-starter"
implementation "$spring:spring-web"
implementation "io.netty:netty-all:4.1.68.Final"
implementation project(":common:util")
compileOnly project(":common:model")
implementation project(":common:model")
}

53
app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/AdsbDronCommandImpl.java

@ -3,29 +3,21 @@ package kr.co.palnet.kac.socket.core.command.impl;
import kr.co.palnet.kac.common.model.common.ControlDto;
import kr.co.palnet.kac.common.model.common.DronDto;
import kr.co.palnet.kac.common.model.common.DronHistoryDto;
import kr.co.palnet.kac.common.model.common.SimpleControlDto;
import kr.co.palnet.kac.socket.core.command.DronCommand;
import kr.co.palnet.kac.socket.core.model.DronRq;
import kr.co.palnet.kac.socket.core.storage.ControlStorage;
import kr.co.palnet.kac.socket.core.storage.DronStorage;
import kr.co.palnet.kac.socket.core.util.DronUtil;
import kr.co.palnet.kac.socket.service.KacAppService;
import kr.co.palnet.kac.socket.service.WebSocketService;
import kr.co.palnet.kac.util.ObjectMapperUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Instant;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@RequiredArgsConstructor
@ -92,40 +84,21 @@ public class AdsbDronCommandImpl implements DronCommand {
if (dronCacheDTO == null) {
// STEP 1. Control ID 발급 -> Application Server Http 통신
try {
// TODO 분리
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI(
kacAppHost + "/api/ctr/cntrl/id/" + dron.getObjectId()
))
.version(HttpClient.Version.HTTP_2)
.GET()
.build();
HttpResponse<String> response = HttpClient
.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
log.debug("CONTROL ID RESPONSE : {}", response.body());
SimpleControlDto simpleControlDto = kacAppService.getControlId(dron.getObjectId());
Map body = ObjectMapperUtils.getObjectMapper().readValue(response.body(), HashMap.class);
Map data = (Map) body.get("data");
dron.setControlId((String) data.get("controlId"));
dron.setTypeCd((String) data.get("typeCd"));
dron.setAreaTrnsYn((String) data.get("areaTrnsYn"));
dron.setControlId(simpleControlDto.getControlId());
dron.setTypeCd(simpleControlDto.getTypeCd());
dron.setAreaTrnsYn(simpleControlDto.getAreaTrnsYn());
dron.setControlStartDt(Instant.now());
ControlDto controlDto = new ControlDto();
controlDto.setControlId((String) data.get("controlId"));
controlDto.setTypeCd((String) data.get("typeCd"));
controlDto.setAreaTrnsYn((String) data.get("areaTrnsYn"));
controlDto.setControlId(simpleControlDto.getControlId());
controlDto.setTypeCd(simpleControlDto.getTypeCd());
controlDto.setAreaTrnsYn(simpleControlDto.getAreaTrnsYn());
controlDto.setRegTime(System.currentTimeMillis());
controlStorage.put(dron.getObjectId(), controlDto);
} catch (IOException e) {
log.error("요청한 URL 정보가 잘못되었습니다.", e.getMessage());
} catch (Exception e) {
e.printStackTrace();
log.error("ERROR : {}\n{}", e.getMessage(), e.getStackTrace());
}
} else {
@ -139,17 +112,25 @@ public class AdsbDronCommandImpl implements DronCommand {
}
// STEP 2. 이력 생성할 전문 전달 -> DRON의 대한 식별정보만 이력 관리
try {
/*
// 저장 해 놓았다가 한거번에 전송
DronStorage dronStorage = DronStorage.getInstance();
dronStorage.add(dron);
*/
kacAppService.sendData(dron);
} catch (Exception e) {
log.error("ERROR : {}\n{}", e.getMessage(), e.getStackTrace());
}
// STEP 3. 화면에 표출할 정보 WebSocket 전달
try {
if ("PA".equals(dron.getObjectId().substring(0, 2))) {
webSocketService.sendData(dron);
}
} catch (Exception e) {
log.error("ERROR : {}\n{}", e.getMessage(), e.getStackTrace());
}
} else {
log.error("좌표 정보가 존재하지 않습니다.");

53
app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/AntosDronCommandImpl.java

@ -3,29 +3,21 @@ package kr.co.palnet.kac.socket.core.command.impl;
import kr.co.palnet.kac.common.model.common.ControlDto;
import kr.co.palnet.kac.common.model.common.DronDto;
import kr.co.palnet.kac.common.model.common.DronHistoryDto;
import kr.co.palnet.kac.common.model.common.SimpleControlDto;
import kr.co.palnet.kac.socket.core.command.DronCommand;
import kr.co.palnet.kac.socket.core.model.DronRq;
import kr.co.palnet.kac.socket.core.storage.ControlStorage;
import kr.co.palnet.kac.socket.core.storage.DronStorage;
import kr.co.palnet.kac.socket.core.util.DronUtil;
import kr.co.palnet.kac.socket.service.KacAppService;
import kr.co.palnet.kac.socket.service.WebSocketService;
import kr.co.palnet.kac.util.ObjectMapperUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Instant;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@RequiredArgsConstructor
@ -91,41 +83,23 @@ public class AntosDronCommandImpl implements DronCommand {
if (dronCacheDTO == null) {
// STEP 1. Control ID 발급 -> Application Server Http 통신
try {
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI(
kacAppHost + "/api/ctr/cntrl/id/" + dron.getObjectId()
))
.version(HttpClient.Version.HTTP_2)
.GET()
.build();
HttpResponse<String> response = HttpClient
.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
log.debug("CONTROL ID RESPONSE : {}", response.body());
SimpleControlDto simpleControlDto = kacAppService.getControlId(dron.getObjectId());
Map body = ObjectMapperUtils.getObjectMapper().readValue(response.body(), HashMap.class);
Map data = (Map) body.get("data");
dron.setControlId((String) data.get("controlId"));
dron.setTypeCd((String) data.get("typeCd"));
dron.setAreaTrnsYn((String) data.get("areaTrnsYn"));
dron.setControlId(simpleControlDto.getControlId());
dron.setTypeCd(simpleControlDto.getTypeCd());
dron.setAreaTrnsYn(simpleControlDto.getAreaTrnsYn());
dron.setControlStartDt(Instant.now());
ControlDto controlDto = new ControlDto();
controlDto.setControlId((String) data.get("controlId"));
controlDto.setTypeCd((String) data.get("typeCd"));
controlDto.setAreaTrnsYn((String) data.get("areaTrnsYn"));
controlDto.setControlId(simpleControlDto.getControlId());
controlDto.setTypeCd(simpleControlDto.getTypeCd());
controlDto.setAreaTrnsYn(simpleControlDto.getAreaTrnsYn());
controlDto.setRegTime(System.currentTimeMillis());
ControlDto newDronCacheDTO = ControlDto.builder().build();
controlStorage.put(dron.getObjectId(), newDronCacheDTO);
controlStorage.put(dron.getObjectId(), controlDto);
} catch (IOException e) {
log.error("요청한 URL 정보가 잘못되었습니다.", e.getMessage());
} catch (Exception e) {
e.printStackTrace();
log.error("ERROR : {}\n{}", e.getMessage(), e.getStackTrace());
}
} else {
@ -139,18 +113,25 @@ public class AntosDronCommandImpl implements DronCommand {
}
// STEP 2. 이력 생성할 전문 전달 -> DRON의 대한 식별정보만 이력 관리
try {
/*
// 저장 해 놓았다가 한거번에 전송
DronStorage dronStorage = DronStorage.getInstance();
dronStorage.add(dron);
*/
kacAppService.sendData(dron);
} catch (Exception e) {
log.error("ERROR : {}\n{}", e.getMessage(), e.getStackTrace());
}
// STEP 3. 화면에 표출할 정보 WebSocket 전달
try {
if ("PA".equals(dron.getObjectId().substring(0, 2))) {
webSocketService.sendData(dron);
}
} catch (Exception e) {
log.error("ERROR : {}\n{}", e.getMessage(), e.getStackTrace());
}
} else {
log.error("좌표 정보가 존재하지 않습니다.");

58
app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/command/impl/SandboxDronCommandImpl.java

@ -3,29 +3,21 @@ package kr.co.palnet.kac.socket.core.command.impl;
import kr.co.palnet.kac.common.model.common.ControlDto;
import kr.co.palnet.kac.common.model.common.DronDto;
import kr.co.palnet.kac.common.model.common.DronHistoryDto;
import kr.co.palnet.kac.common.model.common.SimpleControlDto;
import kr.co.palnet.kac.socket.core.command.DronCommand;
import kr.co.palnet.kac.socket.core.model.DronRq;
import kr.co.palnet.kac.socket.core.storage.ControlStorage;
import kr.co.palnet.kac.socket.core.storage.DronStorage;
import kr.co.palnet.kac.socket.core.util.DronUtil;
import kr.co.palnet.kac.socket.service.KacAppService;
import kr.co.palnet.kac.socket.service.WebSocketService;
import kr.co.palnet.kac.util.ObjectMapperUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Instant;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@RequiredArgsConstructor
@ -91,42 +83,23 @@ public class SandboxDronCommandImpl implements DronCommand {
if (dronCacheDTO == null) {
// STEP 1. Control ID 발급 -> Application Server Http 통신
try {
// TODO 분리
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI(
kacAppHost + "/api/ctr/cntrl/id/" + dron.getObjectId()
))
.version(HttpClient.Version.HTTP_2)
.GET()
.build();
HttpResponse<String> response = HttpClient
.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
log.debug("CONTROL ID RESPONSE : {}", response.body());
SimpleControlDto simpleControlDto = kacAppService.getControlId(dron.getObjectId());
Map body = ObjectMapperUtils.getObjectMapper().readValue(response.body(), HashMap.class);
Map data = (Map) body.get("data");
dron.setControlId((String) data.get("controlId"));
dron.setTypeCd((String) data.get("typeCd"));
dron.setAreaTrnsYn((String) data.get("areaTrnsYn"));
dron.setControlId(simpleControlDto.getControlId());
dron.setTypeCd(simpleControlDto.getTypeCd());
dron.setAreaTrnsYn(simpleControlDto.getAreaTrnsYn());
dron.setControlStartDt(Instant.now());
ControlDto controlDto = new ControlDto();
controlDto.setControlId((String) data.get("controlId"));
controlDto.setTypeCd((String) data.get("typeCd"));
controlDto.setAreaTrnsYn((String) data.get("areaTrnsYn"));
controlDto.setControlId(simpleControlDto.getControlId());
controlDto.setTypeCd(simpleControlDto.getTypeCd());
controlDto.setAreaTrnsYn(simpleControlDto.getAreaTrnsYn());
controlDto.setRegTime(System.currentTimeMillis());
ControlDto newDronCacheDTO = ControlDto.builder().build();
controlStorage.put(dron.getObjectId(), newDronCacheDTO);
controlStorage.put(dron.getObjectId(), controlDto);
} catch (IOException e) {
log.error("요청한 URL 정보가 잘못되었습니다.", e.getMessage());
} catch (Exception e) {
e.printStackTrace();
log.error("ERROR : {}\n{}", e.getMessage(), e.getStackTrace());
}
} else {
@ -142,15 +115,22 @@ public class SandboxDronCommandImpl implements DronCommand {
// STEP 2. 이력 생성할 전문 전달 -> DRON의 대한 식별정보만 이력 관리
try {
/*
// 저장 해 놓았다가 한거번에 전송
DronStorage dronStorage = DronStorage.getInstance();
// dronStorage.set(dron);
dronStorage.add(dron);
*/
kacAppService.sendData(dron);
} catch (Exception e) {
log.error("ERROR : {}\n{}", e.getMessage(), e.getStackTrace());
}
// STEP 3. 화면에 표출할 정보 WebSocket 전달
// webSocketService.sendData(dron);
try {
webSocketService.sendData(dron);
} catch (Exception e) {
log.error("ERROR : {}\n{}", e.getMessage(), e.getStackTrace());
}
Long end = System.currentTimeMillis();
log.info(">>> during time : {}::{}", dron.getObjectId(), end - start);

4
app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/config/AppReadyEvent.java

@ -1,6 +1,6 @@
package kr.co.palnet.kac.socket.core.config;
import kr.co.palnet.kac.socket.core.socket.TcpSocketServer;
import kr.co.palnet.kac.socket.core.socket.SocketServer;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.event.ApplicationReadyEvent;
@ -12,7 +12,7 @@ import org.springframework.stereotype.Component;
@Component
public class AppReadyEvent implements ApplicationListener<ApplicationReadyEvent> {
private final TcpSocketServer socketServer;
private final SocketServer socketServer;
@Override
public void onApplicationEvent(ApplicationReadyEvent event) {

4
app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/config/NettyConfig.java

@ -6,7 +6,7 @@ import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;
import kr.co.palnet.kac.socket.core.socket.TcpChannelInitializer;
import kr.co.palnet.kac.socket.core.socket.ChannelInitializer;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
@ -31,7 +31,7 @@ public class NettyConfig {
private int backlog;
@Bean
public ServerBootstrap serverBootstrap(TcpChannelInitializer channelInitializer) {
public ServerBootstrap serverBootstrap(ChannelInitializer channelInitializer) {
log.info(">>>>> serverBootstrap <<<<<");
// ServerBootstrap: 서버 설정을 도와주는 class
ServerBootstrap b = new ServerBootstrap();

3
app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/socket/TcpChannelInitializer.java → app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/socket/ChannelInitializer.java

@ -1,6 +1,5 @@
package kr.co.palnet.kac.socket.core.socket;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.socket.SocketChannel;
import io.netty.handler.codec.json.JsonObjectDecoder;
@ -17,7 +16,7 @@ import org.springframework.stereotype.Component;
@Slf4j
@RequiredArgsConstructor
@Component
public class TcpChannelInitializer extends ChannelInitializer<SocketChannel> {
public class ChannelInitializer extends io.netty.channel.ChannelInitializer<SocketChannel> {
private final DronHandler dronSocketHandler;

2
app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/socket/TcpSocketServer.java → app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/core/socket/SocketServer.java

@ -13,7 +13,7 @@ import java.net.InetSocketAddress;
@Slf4j
@RequiredArgsConstructor
@Component
public class TcpSocketServer {
public class SocketServer {
private final ServerBootstrap serverBootstrap;
private final InetSocketAddress tcpPort;
private Channel serverChannel;

42
app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/KacAppService.java

@ -1,15 +1,57 @@
package kr.co.palnet.kac.socket.service;
import kr.co.palnet.kac.common.model.common.DronDto;
import kr.co.palnet.kac.common.model.common.SimpleControlDto;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestClient;
import org.springframework.web.util.UriComponentsBuilder;
@Slf4j
@RequiredArgsConstructor
@Service
public class KacAppService {
@Value("${app.kac-app.host}")
private String kacAppHost;
private final String GET_CONTROL_ID = "/api/ctr/cntrl/id";
private final String SEND_ALL = "/api/server/receiver/all";
// control id 가져오기
public SimpleControlDto getControlId(String objectId) {
RestClient client = getRestClient();
String uriString = UriComponentsBuilder.fromPath(GET_CONTROL_ID)
.queryParam("objectId", objectId)
.build().toUriString();
ResponseEntity<SimpleControlDto> resp = client.get()
.uri(uriString)
.retrieve()
.toEntity(SimpleControlDto.class);
return resp.getBody();
}
// dron 데이터 전송
public void sendData(DronDto dto) {
RestClient client = getRestClient();
ResponseEntity<Void> resp = client.post()
.uri(SEND_ALL)
.contentType(MediaType.APPLICATION_JSON)
.body(dto)
.retrieve()
.toBodilessEntity();
}
private RestClient getRestClient() {
return RestClient.builder()
.baseUrl(kacAppHost)
.build();
}
}

18
app/kac-socket-app/src/main/java/kr/co/palnet/kac/socket/service/WebSocketService.java

@ -3,15 +3,31 @@ package kr.co.palnet.kac.socket.service;
import kr.co.palnet.kac.common.model.common.DronDto;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestClient;
import java.time.Instant;
@Slf4j
@RequiredArgsConstructor
@Service
public class WebSocketService {
public void sendData(DronDto dto) {
@Value("${app.web-socket-web.host}")
private String webSocketWebHost;
private final String SEND_DRON_DATA = "/v1/api/ws/dron";
public void sendData(DronDto dto) {
RestClient client = RestClient.create();
client.post()
.uri(webSocketWebHost + SEND_DRON_DATA)
.contentType(MediaType.APPLICATION_JSON)
.body(dto)
.retrieve()
.toBodilessEntity();
}
}

4
app/kac-socket-app/src/main/resources/application.yml

@ -10,7 +10,9 @@ app:
kac-app:
host: http://127.0.0.1:8000
web-socket:
host: http://127.0.0.1:8100
host: http://127.0.0.1:8001
web-socket-web:
host: http://127.0.0.1:8002
server:
port: 8004

2
app/kac-websocket-app/build.gradle

@ -3,7 +3,7 @@ dependencies {
implementation "$boot:spring-boot-starter-web"
implementation "io.netty:netty-all:4.1.68.Final"
implementation project(":common:util")
compileOnly project(":common:model")
implementation project(":common:model")
}

4
app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/config/NettyConfig.java

@ -6,7 +6,7 @@ import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;
import kr.co.palnet.kac.websocket.core.socket.DronChannelInitializer;
import kr.co.palnet.kac.websocket.core.socket.ChannelInitializer;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
@ -32,7 +32,7 @@ public class NettyConfig {
private int backlog;
@Bean
public ServerBootstrap serverBootstrap(DronChannelInitializer channelInitializer) {
public ServerBootstrap serverBootstrap(ChannelInitializer channelInitializer) {
log.info(">>>>> serverBootstrap <<<<<");
// ServerBootstrap: 서버 설정을 도와주는 class
ServerBootstrap b = new ServerBootstrap();

4
app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/socket/DronChannelInitializer.java → app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/core/socket/ChannelInitializer.java

@ -1,11 +1,9 @@
package kr.co.palnet.kac.websocket.core.socket;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.socket.SocketChannel;
import io.netty.handler.codec.http.HttpObjectAggregator;
import io.netty.handler.codec.http.HttpServerCodec;
import io.netty.handler.codec.http.websocketx.WebSocketFrameAggregator;
import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler;
import io.netty.handler.codec.http.websocketx.extensions.compression.WebSocketServerCompressionHandler;
import io.netty.handler.timeout.IdleStateHandler;
@ -17,7 +15,7 @@ import org.springframework.stereotype.Component;
@Slf4j
@RequiredArgsConstructor
@Component
public class DronChannelInitializer extends ChannelInitializer<SocketChannel> {
public class ChannelInitializer extends io.netty.channel.ChannelInitializer<SocketChannel> {
private final WebSocketHandler webSocketHandler;

10
app/kac-websocket-app/src/main/java/kr/co/palnet/kac/websocket/service/ScheduledService.java

@ -22,18 +22,11 @@ public class ScheduledService {
private final ObjectMapper objectMapper = ObjectMapperUtils.getObjectMapper();
private int count = 0;
private int count2 = 0;
@Scheduled(fixedDelay = 1000)
public void test() {
log.info("test.... : {}", count++);
}
// 접속한 모든 채널에 데이터 전송
@Scheduled(fixedDelay = 10 * 1000) // 10초
public void sendAllChannel() {
log.info("sendAllChannel: {}", count2++);
log.info("ready send to all channel");
// 채널 가져오기
ChannelStorage channelStorage = ChannelStorage.getInstance();
ChannelGroup channelGroup = channelStorage.getAll();
@ -53,6 +46,7 @@ public class ScheduledService {
} catch (Exception e) {
log.warn("send fail to all channel. : {}\n{}", e.getMessage(), e.getStackTrace());
}
log.info("done send to all channel");
}
}

5
build.gradle

@ -1,14 +1,15 @@
buildscript {
ext {
spring = '3.2.2'
spring = 'org.springframework'
boot = 'org.springframework.boot'
bootVersion = '3.2.2'
lombok = 'org.projectlombok:lombok'
}
repositories {
mavenCentral()
}
dependencies {
classpath("$boot:spring-boot-gradle-plugin:$spring")
classpath("$boot:spring-boot-gradle-plugin:$bootVersion")
}
}

16
common/model/src/main/java/kr/co/palnet/kac/common/model/common/SimpleControlDto.java

@ -0,0 +1,16 @@
package kr.co.palnet.kac.common.model.common;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class SimpleControlDto {
private String controlId;
private String typeCd;
private String areaTrnsYn;
}
Loading…
Cancel
Save