package com.dy.rtuMw3rd.tcp4Bjnl; 
 | 
  
 | 
import com.dy.common.util.Callback; 
 | 
import org.apache.mina.core.future.ConnectFuture; 
 | 
import org.apache.mina.core.session.IoSession; 
 | 
import org.apache.mina.filter.codec.ProtocolCodecFilter; 
 | 
import org.apache.mina.transport.socket.SocketConnector; 
 | 
import org.apache.mina.transport.socket.nio.NioSocketConnector; 
 | 
  
 | 
import java.net.InetSocketAddress; 
 | 
  
 | 
/** 
 | 
 * @Author: liurunyu 
 | 
 * @Date: 2025/03/18 14:20 
 | 
 * @Description 
 | 
 */ 
 | 
public class TcpConnect { 
 | 
  
 | 
    private static IoSession ioSession ; 
 | 
  
 | 
    public static IoSession getIoSession(){ 
 | 
        return ioSession; 
 | 
    } 
 | 
  
 | 
     /** 
 | 
     * 判断会话是否有效 
 | 
     * @return 是否连接 
 | 
     */ 
 | 
    public static boolean isConnected() { 
 | 
        return (ioSession != null && ioSession.isConnected()); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 创建新会话 
 | 
     * @param host 服务器URI 
 | 
     * @param port 服务器端口 
 | 
     * @param connectTimeout 连接超时时长 
 | 
     * @param handler 数据处理者 
 | 
     * @param callback 回调 
 | 
     * @return 网络会话 
 | 
     */ 
 | 
    public static void createSession(String host , 
 | 
                               int port , 
 | 
                               int connectTimeout , 
 | 
                               TcpHandler handler, 
 | 
                               Callback callback) throws Exception{ 
 | 
        SocketConnector connector = new NioSocketConnector(); 
 | 
        connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new NetDataCodecFactory())); 
 | 
        connector.setHandler(handler); 
 | 
        ConnectFuture connectFuture = connector.connect(new InetSocketAddress(host, port)); 
 | 
        connectFuture.awaitUninterruptibly(connectTimeout); 
 | 
        ioSession = connectFuture.getSession(); 
 | 
        callback.call(ioSession) ; 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 关闭会话联接 
 | 
     * @param se 
 | 
     * @param connectTimeout 
 | 
     */ 
 | 
    public static void disconnect(IoSession se , int connectTimeout) { 
 | 
        if (se != null) { 
 | 
            try{ 
 | 
                se.closeNow().awaitUninterruptibly(connectTimeout); 
 | 
            }catch(Exception e){ 
 | 
                if(se.isConnected()){ 
 | 
                    se.closeNow().awaitUninterruptibly(connectTimeout); 
 | 
                } 
 | 
            }finally{ 
 | 
                se = null; 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public static void output(byte[] bs) throws Exception{ 
 | 
        if (!isConnected()) { 
 | 
            throw new Exception("未创建网络连接"); 
 | 
        }else{ 
 | 
            ioSession.write(bs); 
 | 
        } 
 | 
    } 
 | 
} 
 |