package com.ld.igds.protocol.zldz.mq; import com.ld.igds.io.request.BaseRequest; import com.ld.igds.protocol.zldz.analysis.AnalysisService; import com.ld.igds.protocol.zldz.command.builder.OnLineCommandBuilder; import com.ld.igds.protocol.zldz.command.message.Message; import com.ld.igds.protocol.zldz.server.ZldzServerEngine; import com.ld.igds.protocol.zldz.util.ServerUtils; import com.ld.io.api.InvokeResult; import com.ld.io.api.IoSession; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.RandomUtils; import org.springframework.beans.factory.annotation.Autowired; import java.util.concurrent.CountDownLatch; /** * 报文接受到后处理 */ @Slf4j public class ReceiverServer { private CountDownLatch latch; @Autowired public ReceiverServer(CountDownLatch latch) { this.latch = latch; } @Autowired private AnalysisService analysisService; public void onMessage(String message) { message = message.replaceAll("\"", ""); log.info("-------获取队列信息---" + message); try { String[] attr = message.split("_"); String sessionKey = attr[0]; String msg = attr[1]; analysisService.analysis2(sessionKey, msg); } catch (Exception e) { latch.countDown(); log.error("[正来电子--消息队列数据失败,失败信息:{}]", e.getMessage(),e); } latch.countDown(); } public void onLoginMessage(String sessionKey) { log.info("-------获取登录队列信息---{}", sessionKey); try { sessionKey = sessionKey.replaceAll("\"", ""); String[] attr = sessionKey.split(":"); IoSession session = ZldzServerEngine.getSession(attr[0],Integer.valueOf(attr[1])); if (null == session) { log.warn("---------------没有获取到会话信息-------------{}", sessionKey); latch.countDown(); return; } long l = RandomUtils.nextInt(1000, 9999); Thread.sleep(l); BaseRequest request = new BaseRequest(); request.setIp(session.getAddress()); request.setPort(session.getPort()); request.setCompanyId(ServerUtils.DEFAULT_COMPANY); // Step1 生成在线测试命令 Message message = OnLineCommandBuilder.getInstance().buildMessage(request); // 发送命令 InvokeResult result = session.invoke(message.getByteMsg()); //如果命令发送失败,直接踢掉连接 if (!InvokeResult.SUCCESS.getCode().equals(result.getCode())) { session.destroy(); } } catch (Exception e) { latch.countDown(); log.error("[正来电子--登录消息队列数据失败,失败信息:{}]", e.getMessage()); } latch.countDown(); } }