package com.dy.testClient.tcpConnect;
|
|
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.Logger;
|
import org.apache.mina.core.service.IoHandlerAdapter;
|
import org.apache.mina.core.session.IdleStatus;
|
import org.apache.mina.core.session.IoSession;
|
|
public class MinaHandler extends IoHandlerAdapter {
|
|
private static Logger log = LogManager.getLogger(MinaHandler.class.getName()) ;
|
|
private Object synObj ;
|
private int connectTimeout ;
|
private MinaData minaData ;
|
|
public MinaHandler( int connectTimeout){
|
this.connectTimeout = connectTimeout ;
|
this.synObj = new Object() ;
|
}
|
|
/**
|
* 发送命令
|
* @param session
|
* @param minaData
|
*/
|
public void sendCommand(IoSession session, MinaData minaData){
|
session.write(minaData) ;
|
}
|
|
/**
|
* 取得命令结果
|
* @param waitTimeout
|
*/
|
public MinaData getAnswer(int waitTimeout){
|
synchronized (synObj) {
|
try {
|
synObj.wait(waitTimeout);
|
} catch (InterruptedException e) {
|
e.printStackTrace();
|
}
|
}
|
return this.minaData;
|
}
|
|
|
|
@Override
|
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
|
new MinaConnect().disconnect(session, this.connectTimeout) ;
|
log.error(cause.getMessage()) ;
|
}
|
|
@Override
|
public void messageReceived(IoSession session, Object message) throws Exception {
|
this.minaData = (MinaData) message;
|
synchronized (synObj) {
|
if (synObj != null) {
|
synObj.notifyAll();
|
}
|
}
|
}
|
|
@Override
|
public void messageSent(IoSession session, Object message) throws Exception {
|
super.messageSent(session, message);
|
log.info("命令已经发送。") ;
|
}
|
|
@Override
|
public void sessionClosed(IoSession session) throws Exception {
|
super.sessionClosed(session);
|
log.info("网络会话已经关闭。") ;
|
}
|
|
@Override
|
public void sessionCreated(IoSession session) throws Exception {
|
super.sessionCreated(session);
|
log.info("网络会话已经创建。") ;
|
}
|
|
@Override
|
public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
|
super.sessionIdle(session, status);
|
}
|
|
@Override
|
public void sessionOpened(IoSession session) throws Exception {
|
super.sessionOpened(session);
|
log.info("网络会话已经打开。") ;
|
}
|
|
|
}
|