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