zhubaomin
2025-04-07 1a2b07f01ba4616fd9e894dddf474b56d020158c
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpIoSessionCallback.java
New file
@@ -0,0 +1,87 @@
package com.dy.rtuMw.server.forTcp;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.mina.core.session.IoSession;
import com.dy.common.mw.channel.tcp.TcpIoSessionAttrIdIsRtuAddr;
import com.dy.common.mw.channel.tcp.TcpIoSessionEventCallback;
import com.dy.common.mw.core.CoreUnit;
import com.dy.rtuMw.server.tasks.RtuUpTask;
public class TcpIoSessionCallback implements TcpIoSessionEventCallback{
   private static Logger log = LogManager.getLogger(TcpIoSessionCallback.class.getName());
    /**
     * 网络连接打开
     */
   public void sessionOpened(IoSession session) throws Exception {
       log.info("网络连接建立,终端网址是:" + session.getRemoteAddress().toString()) ;
      if(session != null) {
         String rtuAddr = (String) session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr);
         if(rtuAddr != null && !rtuAddr.trim().equals("")){
            RtuLogDealer.log(rtuAddr, "网络接入");
         }
      }
   }
   /**
    * 网络连接关闭
    */
   @Override
   public void sessionClosed(IoSession session) throws Exception {
      if(session != null){
           String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr) ;
           if(rtuAddr != null && !rtuAddr.trim().equals("")){
              //记录状态
              RtuStatusDealer.offLine(rtuAddr);
            RtuLogDealer.log(rtuAddr, "网络连接关闭");
           }
          log.info("网络连接关闭,"
                + (rtuAddr==null?"":("终端地址是:" + rtuAddr))) ;
                //+ (session==null?"":(session.getRemoteAddress() == null?"":(session.getRemoteAddress().toString()==null?"":(",终端网址是:" + session.getRemoteAddress().toString()))))) ;
      }
    }
   /**
     * 发生异常
     */
    public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
       if(session != null && cause != null){
          String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr) ;
          log.error("网络会话发生异常,"
                + (rtuAddr==null?"":("终端地址是:" + rtuAddr))
                + (session==null?"":(session.getRemoteAddress() != null?(",终端网址是:" + session.getRemoteAddress().toString()):""))
                + "\n异常消息:" + cause.getMessage(), cause);
       }
    }
    /**
     * TCP通道发送完数据后,回调的方法,进行后续数据处理
     */
    public void messageSended(IoSession session, Object message) throws Exception  {
         String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr) ;
       log.info("网络发送了数据,"
             + (rtuAddr==null?"":("终端地址是:" + rtuAddr))
             + (session==null?"":(session.getRemoteAddress() != null?(",终端网址是:" + session.getRemoteAddress().toString()):"")) );
    }
    /**
     * TCP通道接收到数据,回调的方法,进行数据处理
     * 此方法调用后,上行数据脱离了NIO线程,进入了核心线程
     */
   @Override
   public void messageReceived(IoSession session, Object message)throws Exception {
      if(session != null && message != null){
         RtuUpTask task = new RtuUpTask() ;
         task.data = new Object[]{session, (byte[])message} ;
         try{
            CoreUnit.getInstance().pushCoreTask(task);
         }catch(Exception e){
            log.error(e.getMessage(), e);
         }
      }
   }
}