New file |
| | |
| | | package com.dy.rtuMw3rd.tcp4Bjnl; |
| | | |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.dy.common.springUtil.SpringContextUtil; |
| | | import com.dy.rtuMw3rd.tcp4Bjnl.deal.BjnlDealer; |
| | | import com.dy.rtuMw3rd.tcp4Bjnl.protocol.BjnlProtocol; |
| | | import com.dy.rtuMw3rd.tcp4Bjnl.protocol.Result; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.mina.core.buffer.IoBuffer; |
| | | import org.apache.mina.core.session.IoSession; |
| | | import org.apache.mina.filter.codec.CumulativeProtocolDecoder; |
| | | import org.apache.mina.filter.codec.ProtocolDecoderOutput; |
| | | |
| | | import java.io.IOException; |
| | | |
| | | /** |
| | | * @Author: liurunyu |
| | | * @Date: 2025/03/18 14:20 |
| | | * @Description |
| | | */ |
| | | @Slf4j |
| | | public class NetDataDecoder extends CumulativeProtocolDecoder { |
| | | |
| | | /** |
| | | * 对网络传输来的数据进行解码 |
| | | */ |
| | | protected boolean doDecode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws IOException, Exception{ |
| | | int remain = in.remaining() ; |
| | | if(remain > 0){ |
| | | byte[] bs = new byte[remain]; |
| | | in.get(bs) ; |
| | | in.position(0) ; |
| | | String s = new String(bs, "UTF-8") ; |
| | | if(s != null && s.length() > 0){ |
| | | s = s.trim() ; |
| | | } |
| | | this.receive(s); |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | |
| | | private void receive(String json){ |
| | | log.info("北京农林--收到数据:" + json); |
| | | try{ |
| | | if(JSON.isValid(json)){ |
| | | Result res = JSON.parseObject(json, Result.class) ; |
| | | if(res.status != null && res.status.code != null && res.status.code.equals(BjnlProtocol.SuccessCode)){ |
| | | if(res.status.type != null){ |
| | | if(res.status.type.equals(BjnlProtocol.ResultTypeAuth)){ |
| | | forLogin(res) ; |
| | | }else if(res.status.type.equals(BjnlProtocol.ResultTypeData)){ |
| | | forData(res) ; |
| | | }else if(res.status.type.equals(BjnlProtocol.ResultTypeControl)){ |
| | | forControl(res) ; |
| | | }else{ |
| | | log.error("北京农林--服务端返回数据其类型不可识别:" + res.status.type); |
| | | } |
| | | } |
| | | }else{ |
| | | //可能推送的数据中不包含status子数据 |
| | | if(res.data != null && res.data.length() > 0){ |
| | | forData(res) ; |
| | | }else{ |
| | | log.error("北京农林--服务端返回失败信息:" + json); |
| | | } |
| | | |
| | | } |
| | | }else{ |
| | | log.error("北京农林--服务端返回数据非有效JSON数据,\n数据为" + json); |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("北京农林--服务端返回数据转JSON异常,\n数据为" + json ,e); |
| | | } |
| | | } |
| | | |
| | | private void forLogin(Result res){ |
| | | Worker.getInstance().setLogined(); |
| | | BjnlDealer d = SpringContextUtil.getBean(BjnlDealer.class) ; |
| | | d.logined(res); |
| | | } |
| | | |
| | | private void forData(Result res){ |
| | | BjnlDealer d = SpringContextUtil.getBean(BjnlDealer.class) ; |
| | | d.receiveData(res); |
| | | } |
| | | |
| | | private void forControl(Result res){ |
| | | BjnlDealer d = SpringContextUtil.getBean(BjnlDealer.class) ; |
| | | d.controlRes(res); |
| | | } |
| | | } |