package com.example.mina.boxhandler; 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.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; /** * @author 杜云山 * @date 21/03/05 */ @Slf4j public class AeroflexVirtualBoxHandler extends AbstractVirtualBoxHandler { 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; public AeroflexVirtualBoxHandler() { this.initMatrix(); } @Override protected void initMatrix() { int row = 10; int col = 1; int maxAttenuate = 888; dataBuffer = new AeroflexDataBuffer(row, maxAttenuate); } @Override public void messageReceived(IoSession session, Object message) { IoBuffer ioBuffer = (IoBuffer) message; byte[] bytes = ioBuffer.array(); byte[] result = handleMessage(bytes, bytes.length); session.write(IoBuffer.wrap(result)); } @Override protected byte[] handleMessage(byte[] cmd, int len) { String command = new String(cmd).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 NONE; } 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 str.getBytes(); } } return ERROR; } 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 str.getBytes(); } } } return ERROR; } else { return ERROR; } } @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); } }