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