package com.example.mina.server.box.rbm3000; import com.example.mina.server.base.AbstractVirtualBoxHandler; import com.example.mina.server.entity.Entry; import com.example.mina.server.entity.Rbm3000DataBuffer; import com.example.mina.server.util.CommandHelper; import lombok.extern.slf4j.Slf4j; import org.apache.mina.core.session.IoSession; /** * @author dy * @date 2021/3/5 */ @Slf4j public class Rbm3000VirtualBoxHander extends AbstractVirtualBoxHandler { private Rbm3000DataBuffer dataBuffer; public Rbm3000VirtualBoxHander() { this.initMatrix(); } @Override protected void initMatrix() { int row = 6; int col = 8; int maxAtten = 222; dataBuffer = new Rbm3000DataBuffer(row, col); } @Override protected Rbm3000ResponseMessage handleMessage(Rbm3000RequestMessage message) { byte[] buffer = message.getAnalyticalMessage(); int len = message.getInput().length; Entry[][] entries = dataBuffer.getMatrixData(); if (len == message.LENGTH8) { switch (message.getInput()[0]) { case 0x30: int row = message.getRow(); int col = message.getCol(); int rowCol = message.getRowCol(); int colRow = message.getColRow(); for (int i = 0; i < dataBuffer.getMaxCol(); i++) { if (entries[row - 1][i].getValue() == 1) { rowCol = i + 1; break; } } for (int i = 0; i < dataBuffer.getMaxRow(); i++) { if (entries[i][col - 1].getValue() == 1) { colRow = i + 1; } } dataBuffer.setAttenuation(row, rowCol, 0); dataBuffer.setAttenuation(row, col, 1); dataBuffer.setAttenuation(colRow, col, 0); dataBuffer.setAttenuation(colRow, rowCol, 1); buffer[5] = CommandHelper.BCD[colRow]; buffer[6] = CommandHelper.BCD[rowCol]; return Rbm3000ResponseMessage.builder().result(buffer).build(); case 0x68: boolean isA = message.isA(); int callPort = message.getCallPort(); int returnPort = message.getReturnPort(); if (isA) { for (int i = 0; i < dataBuffer.getMaxCol(); i++) { if (entries[callPort - 1][i].getValue() == 1) { returnPort = i + 1; break; } } } else { for (int i = 0; i < dataBuffer.getMaxRow(); i++) { if (entries[i][callPort - 1].getValue() == 1) { returnPort = i + 1; } } } buffer[4] = CommandHelper.BCD[returnPort]; return Rbm3000ResponseMessage.builder().result(buffer).build(); case 0x62: return Rbm3000ResponseMessage.builder().result(buffer).build(); default: break; } } buffer = new byte[len + 2]; buffer[0] = (byte) 0xFE; buffer[1] = (byte) 0xFE; System.arraycopy(message.getInput(), 0, buffer, 2, len); return Rbm3000ResponseMessage.builder().result(buffer).build(); } @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); } }