java - 在乐山服务器上接收观察到的对象变化
问题描述
我正在基于 repo 中包含的 leshan-server-demo 构建一个简单的原型。我正在尝试从已观察到的对象接收更新。数据包捕获显示更新正在发送到服务器,但我没有收到任何通知。
我找到的最接近的答案来自 2015 年(如何在乐山的已观察资源上检索更新的内容?) - 但随后对乐山代码库的更改使相同的技术无法使用。
我尝试使用 ObservationService 添加一个 ObservationListener,但这似乎只在请求 Observe 时提醒我,而不是在端点发送更改的值时提醒我。
static private void attachListener(final LeshanServer server) {
System.out.println("Attaching Listener");
server.getObservationService().addListener(new ObservationListener() {
@Override
public void newObservation(Observation observation, Registration registration) {
System.out.println("New Observation");
}
@Override
public void cancelled(Observation observation) {
System.out.println("Observation cancellation");
}
@Override
public void onResponse(Observation observation, Registration registration, ObserveResponse response) {
System.out.println("Observation Response");
}
@Override
public void onError(Observation observation, Registration registration, Exception error) {
System.out.println("Observation Error");
}
});
}
我应该如何监听乐山服务器上的观察对象?
解决方案
@Override
public void onResponse(Observation observation, Registration registration, ObserveResponse response) {
if (LOG.isDebugEnabled()) {
LOG.debug("Received notification from [{}] containing value [{}]", observation.getPath(),
response.getContent().toString());
}
if (registration != null) {
String data = new StringBuilder("{\"ep\":\"").append(registration.getEndpoint()).append("\",\"res\":\"")
.append(observation.getPath().toString()).append("\",\"val\":")
.append(gson.toJson(response.getContent())).append("}").toString();
sendEvent(EVENT_NOTIFICATION, data, registration.getEndpoint());
}
}
response.getContent() 包含新值。代码构建的数据 json 看起来像
{
"ep": "rpitest",
"res": "/3334/0",
"val": {
"id": 0,
"resources": [{
"id": 5704,
"value": 1.7929173707962036
}, {
"id": 5702,
"value": 0.9917597770690918
}, {
"id": 5703,
"value": 154.53704833984375
}]
}
}
推荐阅读
- c++ - SystemKernelVaShadowInformation 和 SystemSpeculationControlInformation 是否可以替代 NtQuerySystemInformation?
- sql - 在 SQL Server 查询中有条件地应用多个计数
- increment - 如何将值递增 1 直到 while 循环内的某个点(伪代码)?
- jenkins - 詹金斯管道卡在步骤 ChannelClosedException
- ios - IOS - Admob 未加载真实(奖励)广告
- java - Java 8:如何根据保留顺序的多个属性从列表中删除重复项
- python - 我需要帮助将模块从同级文件夹导入测试
- java - Kotlin JaCoCo - IllegalClassFormatException。请提供原始的非仪器类
- r - 如何为向量给出的矩阵添加前缀?
- java - 使用 Mockito 在 JUnit 5 中模拟静态方法