Box1Handler.java 3.75 KB
package com.example.mina.box1;

import com.example.mina.base.AbstractVirtualBoxHandler;
import com.example.mina.base.AeroflexDataBuffer;
import com.example.mina.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.IoSession;

/**
 * @author 杜云山
 * @date 21/03/05
 */
@Slf4j
public class Box1Handler extends AbstractVirtualBoxHandler {


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

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

    private AeroflexDataBuffer dataBuffer;

    public Box1Handler() {
        this.initMatrix();
    }

    @Override
    protected void initMatrix() {

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

        dataBuffer = new AeroflexDataBuffer(row, maxAtten);
    }

    @Override
    protected void handleMessage() {

    }

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

        IoBuffer ioBuffer = (IoBuffer) message;
        byte[] bytes = new byte[ioBuffer.limit()];
        ioBuffer.get(bytes, ioBuffer.position(), ioBuffer.limit());

        byte[] result = handleCommand(bytes, bytes.length);

        session.write(IoBuffer.wrap(result));
    }

    @Override
    public void sessionCreated(IoSession session) {

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

    @Override
    public void sessionOpened(IoSession session) {

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

    @Override
    public void sessionClosed(IoSession session) {

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

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

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


    protected byte[] handleCommand(byte[] cmd, int len) {
        String command = new String(cmd).trim();

//        LogUtils.println("AeroflexVirtualBoxService::handleCommand receive : ", command);

        if (command.startsWith("ATTN ALL MAX")) {//set all to max
            for (int i = 1; i < dataBuffer.getMaxRow(); i++) {
                dataBuffer.setOffset(i, dataBuffer.getMaxAtten());
            }

            return NONE;
        } else if (command.startsWith("ATTN?")) {//get
            String[] sss = command.split(" ");
            if (sss.length >= 2) {
//                LogUtils.println(sss[0], sss[1]);

                int row = StrUtil.toInt(sss[1]);
                if (row >= 0 && row <= dataBuffer.getMaxRow()) {
                    String str = String.valueOf(dataBuffer.getOffset(row));
//                    LogUtils.println("AeroflexVirtualBoxService::handleCommand  return : ", str);
                    return str.getBytes();
                }
            }

            return ERROR;
        } else if (command.startsWith("ATTN")) {//Set, Follow by ATTN?
//            LogUtils.println("command.startsWith(\"ATTN\")");
            String[] aa = command.split(";");

//            LogUtils.println(aa[0], aa[1]);

            String[] sss = aa[0].split(" ");
            StrUtil.printArray(sss);

            if (sss.length >= 3) {
                int row = StrUtil.toInt(sss[1]);
                int val = StrUtil.toInt(sss[2]);

                System.out.println(row + "/" + val);

                if (row >= 0 && row <= dataBuffer.getMaxRow()) {
                    if (val >= 0 && val <= dataBuffer.getMaxAtten()) {
                        dataBuffer.setOffset(row, val);

                        String str = String.valueOf(dataBuffer.getOffset(row));
//                        LogUtils.println("handleCommand  return =====>  ", str);
                        return str.getBytes();
                    }
                }
            }

            return ERROR;

        } else {
            return ERROR;
        }

    }

}