package com.genersoft.iot.vmp.netty.handle; import com.genersoft.iot.vmp.netty.business.entity.TalkBackEquipment; import com.genersoft.iot.vmp.netty.business.service.TalkBackEquipmentService; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.channel.socket.DatagramPacket; import io.netty.util.CharsetUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.util.Date; /** * updHandler udp 服务端数据接收处理 * @author zhongrj * @date 2023-02-21 */ @Component public class UdpServerHandler extends SimpleChannelInboundHandler { private Logger logger = LoggerFactory.getLogger(this.getClass()); private static UdpServerHandler udpServerHandler; @Autowired private TalkBackEquipmentService talkBackEquipmentService; @PostConstruct public void init() { udpServerHandler = this; udpServerHandler.talkBackEquipmentService = this.talkBackEquipmentService; } @Override protected void channelRead0(ChannelHandlerContext channelHandlerContext, DatagramPacket datagramPacket) throws Exception { // 读取收到的数据 ByteBuf buf = (ByteBuf) datagramPacket.copy().content(); byte[] req = new byte[buf.readableBytes()]; buf.readBytes(req); String body = new String(req, CharsetUtil.UTF_8); System.out.println("【UDP】>>>>>> 收到客户端的数据:"+body); //获取字符串的长度 int length = body.length(); System.out.println("数据长度>>>>>> = " + length); //保存数据 // saveTalkBackEquipmentInfo(body); } /** * 保存设备数据 * @param body */ @Async public void saveTalkBackEquipmentInfo(String body) { TalkBackEquipment equipmentRecord = new TalkBackEquipment(); equipmentRecord.setName("ces"); equipmentRecord.setCode("cs123456"); equipmentRecord.setStatus(1); equipmentRecord.setUnitName("CSDW"); equipmentRecord.setUnitCode("CSDW123456"); equipmentRecord.setPoliceName("JINGYUAN"); equipmentRecord.setPoliceCode("JINGYUAN123456"); equipmentRecord.setTerminalNumber("788888888888"); equipmentRecord.setLongitude("128.124124412"); equipmentRecord.setLatitude("27.1224521421"); equipmentRecord.setSpeed("10"); equipmentRecord.setDirection("10"); equipmentRecord.setElevation("10"); equipmentRecord.setPrecisions("10"); equipmentRecord.setReceiveTime(new Date()); equipmentRecord.setCreateTime(new Date()); equipmentRecord.setUpdateTime(new Date()); //保存数据 udpServerHandler.talkBackEquipmentService.save(equipmentRecord); } /** * 捕获异常 * @param ctx * @param cause * @throws Exception */ @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause)throws Exception { logger.error("UdpServerHandler exceptionCaught"+cause.getMessage()); System.out.println("UdpServerHandler exceptionCaught"+cause.getMessage()); cause.printStackTrace(); ctx.close(); } /** * 消息没有结束的时候触发 * @param ctx * @throws Exception */ @Override public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { ctx.flush(); } }