AeroflexVirtualBoxHandler.java 3.26 KB
package com.example.mina.box.aeroflex;

import com.example.mina.base.AbstractVirtualBoxHandler;
import com.example.mina.entity.AeroflexDataBuffer;
import lombok.extern.slf4j.Slf4j;
import org.apache.mina.core.session.IoSession;

/**
 * @author 杜云山
 * @date 21/03/05
 */
@Slf4j
public class AeroflexVirtualBoxHandler
        extends AbstractVirtualBoxHandler<AeroflexRequestMessage, AeroflexResponseMessage> {

    private AeroflexDataBuffer dataBuffer;

    @Override
    protected void initMatrix() {

        int row = 10;
        int col = 1;
        int maxAttenuate = 888;

        dataBuffer = new AeroflexDataBuffer(row, maxAttenuate);
    }

    @Override
    protected AeroflexResponseMessage handleMessage(AeroflexRequestMessage requestMessage) {

        log.info("aeroflexVirtualBoxHandler receive: {}", requestMessage.getCmd());

        if (requestMessage.isHasError()) {
            return AeroflexResponseMessage.builder().result(AeroflexResponseMessage.ERROR).build();
        }

        // set all to max
        if (requestMessage.isRequestSetAllMax()) {
            for (int i = 1; i < dataBuffer.getMaxRow(); i++) {
                dataBuffer.setOffset(i, dataBuffer.getMaxAttenuate());
            }
            return AeroflexResponseMessage.builder().result(AeroflexResponseMessage.NONE).build();
        }

        // get one
        if (requestMessage.isRequestGetOne()) {
            int row = requestMessage.getRequestGetOneRow();
            if (row >= 0 && row <= dataBuffer.getMaxRow()) {
                String str = String.valueOf(dataBuffer.getOffset(row));
                log.info("aeroflexVirtualBoxHandler return: {}", str);
                return AeroflexResponseMessage.builder().result(str.getBytes()).build();
            }
            return AeroflexResponseMessage.builder().result(AeroflexResponseMessage.NONE).build();

        }

        // Set, Follow by ATTN?
        if (requestMessage.isRequestSetOne()) {

            int row = requestMessage.getRequestSetOneRow();
            int val = requestMessage.getRequestSetOneValue();

            if (row >= 0 && row <= dataBuffer.getMaxRow()) {
                if (val >= 0 && val <= dataBuffer.getMaxAttenuate()) {
                    dataBuffer.setOffset(row, val);
                    String str = String.valueOf(dataBuffer.getOffset(row));
                    log.info("aeroflexVirtualBoxHandler return =====>  {}", str);
                    return AeroflexResponseMessage.builder().result(str.getBytes()).build();
                }
            }
            return AeroflexResponseMessage.builder().result(AeroflexResponseMessage.ERROR).build();
        }

        return AeroflexResponseMessage.builder().result(AeroflexResponseMessage.ERROR).build();
    }

    @Override
    public void sessionCreated(IoSession session) {

        log.info("--- abstractVirtual server session created");
    }

    @Override
    public void sessionOpened(IoSession session) {

        log.info("--- abstractVirtual server session Opened");
    }

    @Override
    public void sessionClosed(IoSession session) {

        log.info("--- abstractVirtual server session Closed");
    }

    @Override
    public void messageSent(IoSession session, Object message) {

        log.info("--- abstractVirtual 发送数据成功!{}", message);
    }

}