package com.doumee.jtt808.web.config;
|
|
import io.github.yezhihao.netmc.NettyConfig;
|
import io.github.yezhihao.netmc.Server;
|
import io.github.yezhihao.netmc.codec.Delimiter;
|
import io.github.yezhihao.netmc.codec.LengthField;
|
import io.github.yezhihao.netmc.core.HandlerMapping;
|
import io.github.yezhihao.netmc.session.SessionManager;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.core.annotation.Order;
|
import org.yzh.protocol.codec.JTMessageAdapter;
|
import com.doumee.jtt808.web.endpoint.JTHandlerInterceptor;
|
|
@Order(Integer.MIN_VALUE)
|
@Configuration
|
@ConditionalOnProperty(value = "jt-server.jt808.enable", havingValue = "true")
|
public class JTConfig {
|
|
private final JTMessageAdapter messageAdapter;
|
private final HandlerMapping handlerMapping;
|
private final JTHandlerInterceptor handlerInterceptor;
|
private final SessionManager sessionManager;
|
|
public JTConfig(JTMessageAdapter messageAdapter, HandlerMapping handlerMapping, JTHandlerInterceptor handlerInterceptor, SessionManager sessionManager) {
|
this.messageAdapter = messageAdapter;
|
this.handlerMapping = handlerMapping;
|
this.handlerInterceptor = handlerInterceptor;
|
this.sessionManager = sessionManager;
|
}
|
|
@ConditionalOnProperty(value = "jt-server.jt808.port.tcp")
|
@Bean(initMethod = "start", destroyMethod = "stop")
|
public Server jt808TCPServer(@Value("${jt-server.jt808.port.tcp}") int port) {
|
return NettyConfig.custom()
|
//心跳超时(秒)
|
.setIdleStateTime(180, 0, 0)
|
.setPort(port)
|
//标识位[2] + 消息头[21] + 消息体[1023 * 2(转义预留)] + 校验码[1] + 标识位[2]
|
.setMaxFrameLength(2 + 21 + 1023 * 3 + 1 + 2)
|
.setDelimiters(new Delimiter(new byte[]{0x7e}, false))
|
.setDecoder(messageAdapter)
|
.setEncoder(messageAdapter)
|
.setHandlerMapping(handlerMapping)
|
.setHandlerInterceptor(handlerInterceptor)
|
.setSessionManager(sessionManager)
|
.setName("808-TCP")
|
.build();
|
}
|
|
@ConditionalOnProperty(value = "jt-server.jt808.port.udp")
|
@Bean(initMethod = "start", destroyMethod = "stop")
|
public Server jt808UDPServer(@Value("${jt-server.jt808.port.udp}") int port) {
|
return NettyConfig.custom()
|
.setPort(port)
|
.setDelimiters(new Delimiter(new byte[]{0x7e}, false))
|
.setDecoder(messageAdapter)
|
.setEncoder(messageAdapter)
|
.setHandlerMapping(handlerMapping)
|
.setHandlerInterceptor(handlerInterceptor)
|
.setSessionManager(sessionManager)
|
.setName("808-UDP")
|
.setEnableUDP(true)
|
.build();
|
}
|
|
@ConditionalOnProperty(value = "jt-server.alarm-file.enable", havingValue = "true")
|
@Bean(initMethod = "start", destroyMethod = "stop")
|
public Server alarmFileServer(@Value("${jt-server.alarm-file.port}") int port, JTMessageAdapter alarmFileMessageAdapter) {
|
return NettyConfig.custom()
|
.setPort(port)
|
.setMaxFrameLength(2 + 21 + 1023 * 2 + 1 + 2)
|
.setLengthField(new LengthField(new byte[]{0x30, 0x31, 0x63, 0x64}, 1024 * 65, 58, 4))
|
.setDelimiters(new Delimiter(new byte[]{0x7e}, false))
|
.setDecoder(alarmFileMessageAdapter)
|
.setEncoder(alarmFileMessageAdapter)
|
.setHandlerMapping(handlerMapping)
|
.setHandlerInterceptor(handlerInterceptor)
|
.setName("AlarmFile")
|
.build();
|
}
|
}
|