AbstractClientFactory.java 1.19 KB
package com.example.mina.client.base;

import lombok.extern.slf4j.Slf4j;
import org.apache.mina.core.filterchain.IoFilterChain;
import org.apache.mina.filter.codec.ProtocolCodecFilter;

@Slf4j
public abstract class AbstractClientFactory {

    protected MatrixDataProxy matrixDataProxy;

    public void setMatrixDataProxy(MatrixDataProxy matrixDataProxy) {
        this.matrixDataProxy = matrixDataProxy;
    }

    abstract public AbstractMatrixIoHandler getClientHandler();

    public void buildFilterChain(IoFilterChain ioFilterChain) throws Exception{

        ioFilterChain.addLast("codec", new ProtocolCodecFilter(new ByteProtocolFactory()));

    }

    public MatrixClient createClient(MatrixConnectConfig connectConfig){


        try{

            MatrixClient client = new MatrixClient(connectConfig);

            client.setClientHandler(getClientHandler());
            client.setMatrixDataProxy(matrixDataProxy);
            client.connect();

            buildFilterChain(client.getFilterChain());
            return client;
        }catch (Exception e) {
            log.error("Can not create the client, error: ", e);
            throw new RuntimeException("create client error!");
        }
    }
}