AbstractClient.java 2.52 KB
package com.example.mina.client.base;

import com.example.mina.client.entity.AbstractClientMessage;
import com.example.mina.client.entity.ClientDTO;
import com.example.mina.client.service.ServerService;
import com.example.mina.client.service.impl.ServerServiceImpl;
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 ProtocolCodecFactory protocolCodecFactory;

    protected AbstractVirtualBoxClientHandler abstractVirtualBoxClientHandler;

    protected AbstractHardwareDataBuffer hardwareDataBuffer;

    protected AbstractClientMessage abstractClientMessage;

    protected IoSession ioSession;

    protected ServerService serverService = new ServerServiceImpl();

    protected AbstractClient() {
        init();
    }

    protected abstract void init();

    public void start(ClientDTO clientDTO) {
        //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(abstractClientMessage.getServerMessage().getHost(),
                abstractClientMessage.getServerMessage().getPort()));
        // 等待建立连接
        connectFuture.awaitUninterruptibly();
        // 获取连接会话
        //int a = getAttenuation(3);

        this.ioSession = connectFuture.getSession();
        setAttenuation(clientDTO);
        test(clientDTO);

        //int b = getAttenuation(3);
    }

    abstract public void test(ClientDTO clientDTO);

    abstract public int getAttenuation(int col);

    /*public boolean isConnected() {
        return false;
    }*/

    //public void close() {}

    abstract public void setAttenuation(ClientDTO clientDTO);



    //abstract public Boolean reset();

    //abstract public int[][] getAll();

}