package com.sandu.ximon.admin.manager.iot.rrpc.mainboard;
|
|
import com.alibaba.fastjson.JSON;
|
import com.aliyuncs.DefaultAcsClient;
|
import com.aliyuncs.iot.model.v20180120.InvokeThingServiceResponse;
|
import com.aliyuncs.profile.DefaultProfile;
|
import com.aliyuncs.profile.IClientProfile;
|
import com.sandu.common.execption.BusinessException;
|
import com.sandu.ximon.admin.manager.iot.amqp.MqttMainBoardConfig;
|
import com.sandu.ximon.admin.manager.iot.frame.IRequestFrame;
|
import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame;
|
import com.sandu.ximon.admin.manager.iot.rrpc.BaseInvokeSyncService;
|
import com.sandu.ximon.admin.manager.iot.rrpc.dto.CommonFrame;
|
import com.sandu.ximon.admin.manager.iot.rrpc.dto.InvokeParam;
|
import com.sandu.ximon.admin.manager.iot.rrpc.dto.WrapResponseCommonFrame;
|
import com.sandu.ximon.admin.manager.iot.rrpc.util.FrameUtils;
|
import org.springframework.beans.BeanUtils;
|
|
import java.util.Map;
|
|
/**
|
* @author chenjiantian
|
* @date 2021/12/3 11:31
|
* 主板rrpc通信实现类
|
*/
|
public class MainBoardInvokeSyncService extends BaseInvokeSyncService {
|
private static volatile DefaultAcsClient client = null;
|
|
private final static String PRODUCT_KEY = "a1JsfPG4iKW";
|
|
@Override
|
public String getProductKey() {
|
return PRODUCT_KEY;
|
}
|
|
@Override
|
public CommonFrame sendRRPC(String deviceName, IRequestFrame iRequestFrame) {
|
InvokeParam param = new InvokeParam();
|
param.setOperate("1001");
|
param.setFrame(iRequestFrame.getEncodeFrame());
|
InvokeThingServiceResponse.Data data = invokeThing(deviceName, param);
|
if (data == null) {
|
return null;
|
}
|
String result = data.getResult();
|
result = result.replace("\\", "");
|
Map map = JSON.parseObject(result, Map.class);
|
result = (String) map.get("msg");
|
CommonFrame connectFrame = FrameUtils.transformMessageToFrame(result);
|
return connectFrame;
|
}
|
|
@Override
|
public <T extends BaseResponseInnerFrame<T>> WrapResponseCommonFrame<T> sendRRPC(String deviceName, IRequestFrame iRequestFrame, Class<T> clz) {
|
CommonFrame commonFrame = sendRRPC(deviceName, iRequestFrame);
|
WrapResponseCommonFrame<T> responseCommonFrame = new WrapResponseCommonFrame<>();
|
BeanUtils.copyProperties(commonFrame, responseCommonFrame);
|
try {
|
responseCommonFrame.setResponseTransform(clz.newInstance().transformFrame(responseCommonFrame.getPayload()));
|
} catch (InstantiationException | IllegalAccessException e) {
|
throw new BusinessException(String.format("找不到%s的构造函数", clz.getName()));
|
}
|
return responseCommonFrame;
|
}
|
|
public static void main(String[] args) {
|
String s = "FEA581000BFE010003FFFF004597147735AB2D28";
|
System.out.println(FrameUtils.decodeReportMessage(s));
|
}
|
|
private static class SingletonClassInstance {
|
private static final MainBoardInvokeSyncService INSTANCE = new MainBoardInvokeSyncService();
|
}
|
|
private MainBoardInvokeSyncService() {
|
}
|
|
public static MainBoardInvokeSyncService getInstance() {
|
return SingletonClassInstance.INSTANCE;
|
}
|
|
@Override
|
public DefaultAcsClient getClient() {
|
if (client == null) {
|
synchronized (MainBoardInvokeSyncService.class) {
|
if (client == null) {
|
IClientProfile profile = DefaultProfile.getProfile("cn-shanghai", MqttMainBoardConfig.ACCESS_KEY, MqttMainBoardConfig.ACCESS_SECRET);
|
DefaultProfile.addEndpoint("cn-shanghai", "Iot", "iot.cn-shanghai.aliyuncs.com");
|
client = new DefaultAcsClient(profile);
|
}
|
}
|
}
|
return client;
|
}
|
|
|
}
|