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; } } }