| 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); | 
|             } | 
|         } | 
|     } | 
|   | 
| } |