package com.example.mina.client.base; import com.example.mina.client.entity.AbstractClientMessage; import com.example.mina.client.property.ClientProperty; import com.example.mina.server.base.AbstractHardwareDataBuffer; import org.apache.mina.core.future.ConnectFuture; import org.apache.mina.core.service.IoConnector; import org.apache.mina.core.session.IoSession; import org.apache.mina.filter.codec.ProtocolCodecFactory; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.transport.socket.nio.NioSocketConnector; import java.net.InetSocketAddress; /** * @author dy * @date 2021/3/10 */ public abstract class AbstractClient { protected ClientProperty clientProperty; protected ProtocolCodecFactory protocolCodecFactory; protected AbstractVirtualBoxClientHandler abstractVirtualBoxClientHandler; protected AbstractHardwareDataBuffer hardwareDataBuffer; protected AbstractClientMessage abstractClientMessage; protected IoSession ioSession; protected AbstractClient() { initHardwareDataBuffer(); initClientMessage(); init(abstractClientMessage); } protected abstract void init(AbstractClientMessage abstractClientMessage); protected abstract void initHardwareDataBuffer(); protected abstract void initClientMessage(); public void start() { //1、创建客户端IoService IoConnector connector = new NioSocketConnector(); //客户端链接超时时间 connector.setConnectTimeoutMillis(30000); //2、客户端过滤器 connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(protocolCodecFactory)); //3、客户端IoHandler,发生消息 connector.setHandler(abstractVirtualBoxClientHandler); //连接服务端 ConnectFuture connectFuture = connector.connect(new InetSocketAddress(abstractVirtualBoxClientHandler.getClientMessage().getHost(), abstractVirtualBoxClientHandler.getClientMessage().getPort())); // 等待建立连接 connectFuture.awaitUninterruptibly(); // 获取连接会话 this.ioSession = connectFuture.getSession(); //setAttenuation(1, 1, 10); } public boolean isConnected() { return false; } public void close() { } //abstract public boolean setAttenuation(int row, int col, int attenuation); //abstract public int getAttenuation(int row, int col); abstract public Boolean reset(); abstract public int[][] getAll(); }