package com.example.mina.server.box.qrb3000; import com.example.mina.server.base.AbstractVirtualBoxHandler; import com.example.mina.server.entity.Qrb3000DataBuffer; import com.example.mina.server.util.CommandHelper; import com.example.mina.server.util.LogUtils; import lombok.extern.slf4j.Slf4j; import org.apache.mina.core.session.IoSession; /** * @author dy * @date 21/03/05 */ @Slf4j public class Qrb3000VirtualBoxHandler extends AbstractVirtualBoxHandler { private Qrb3000DataBuffer dataBuffer; @Override protected void initMatrix() { int row = 100; int col = 100; int maxAttenuate = 63; dataBuffer = new Qrb3000DataBuffer(row, col, maxAttenuate); } @Override protected Qrb3000ResponseMessage handleMessage(Qrb3000RequestMessage message) { String cmd = new String(message.getInput()).trim(); log.info("qrb3000VirtualBoxHandler receive: {}", cmd); byte[] buffer = message.getAnalyticalMessage(); int len = message.getInput().length; //F: Firmware Version / Unit ID Page 82 //02 XX XX 46 03 XX //response //06 XX XX 46 76 37 2E 30 30 20 50 76 32 2E 31 35 20… //ACK ADR ADR F v 7 . 0 0 P v 2 . 1 5 … //…58 52 4D 32 32 35 30 2F 30 33 32 58 30 33 32 3 XX //… X R M 2 2 5 0 / 0 3 2 X 0 3 2 ETX CHK if (len == message.LENGTH6) { return Qrb3000ResponseMessage.builder().result(buffer).build(); } if (len == message.LENGTH8) { switch (message.getInput()[0]) { case 0x30: LogUtils.println(String.format("setAttenuation: %d, %d, %d", CommandHelper.BCD_REV[message.getInput()[3]], CommandHelper.BCD_REV[message.getInput()[4]], message.getInput()[5])); dataBuffer.setAttenuation(CommandHelper.BCD_REV[message.getInput()[3]], CommandHelper.BCD_REV[message.getInput()[4]], message.getInput()[5]); buffer[5] = (byte) dataBuffer.getAttenuation(CommandHelper.BCD_REV[message.getInput()[3]], CommandHelper.BCD_REV[message.getInput()[4]]); return Qrb3000ResponseMessage.builder().result(buffer).build(); case 0x68: // dataBuffer.setOffset(Qrb3000CommandHelper.BCD_REV[message.getInput()[3]], random.nextInt(120) - 60 ); buffer[6] = (byte) dataBuffer.getOffset(CommandHelper.BCD_REV[message.getInput()[3]]); return Qrb3000ResponseMessage.builder().result(buffer).build(); case 0x62: return Qrb3000ResponseMessage.builder().result(buffer).build(); default: break; } } else { buffer[6] = (byte) dataBuffer.getOffset(CommandHelper.BCD_REV[message.getInput()[3]]); return Qrb3000ResponseMessage.builder().result(buffer).build(); } buffer = new byte[len + 2]; buffer[0] = (byte) 0xFE; buffer[1] = (byte) 0xFE; System.arraycopy(message.getInput(), 0, buffer, 2, len); return Qrb3000ResponseMessage.builder().result(buffer).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); } }