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("网络会话已经打开。") ; 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |