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()) ;
|
}
|
|
/**
|
* 网络连接关闭
|
*/
|
@Override
|
public void sessionClosed(IoSession session) throws Exception {
|
if(session != null){
|
String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrIdKey) ;
|
|
if(rtuAddr != null){
|
//记录状态
|
RtuStatusDealer.offLine(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.sessionArrIdKey) ;
|
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.sessionArrIdKey) ;
|
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);
|
}
|
}
|
}
|
|
}
|