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

import com.example.mina.base.AbstractVirtualBoxHandler;
import com.example.mina.entity.AeroflexDataBuffer;
import com.example.mina.util.StrUtil;
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 static final byte[] ERROR = "ERROR".getBytes();

    private static final byte[] NONE = "OK".getBytes();

    private static final String SET_ALL = "ATTN ALL MAX";

    private static final String SET_ONE = "ATTN";

    private static final String GET_ONE = "ATTN?";

    private static final String SPACE_SPLIT = " ";

    private static final String SEMICOLON_SPLIT = ";";

    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 message) {
        String command = message.getCmd().trim();

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

        if (command.startsWith(SET_ALL)) {
            //set all to max
            for (int i = 1; i < dataBuffer.getMaxRow(); i++) {
                dataBuffer.setOffset(i, dataBuffer.getMaxAttenuate());
            }

            return AeroflexResponseMessage.builder().result(NONE).build();
        } else if (command.startsWith(GET_ONE)) {
            //get
            String[] sss = command.split(SPACE_SPLIT);
            if (sss.length >= 2) {

                int row = StrUtil.toInt(sss[1]);
                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(ERROR).build();

        } else if (command.startsWith(SET_ONE)) {
            //Set, Follow by ATTN?
            String[] aa = command.split(SEMICOLON_SPLIT);

            String[] sss = aa[0].split(SPACE_SPLIT);

            if (sss.length >= 3) {

                int row = StrUtil.toInt(sss[1]);
                int val = StrUtil.toInt(sss[2]);

                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(ERROR).build();

        } else {
            return AeroflexResponseMessage.builder().result(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);
    }

}