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