我在我的跟踪代理中为特定的确认消息编写解析器。解析后,我想检索跟踪器的所有待处理命令/固件更新,以便我可以将它们与确认内容进行比较,并更新相关操作,以便它们在QuarkIoE中相应显示。
我该怎么做?例如,也许我可以使用OperationsHelper.getOperationsByStatusAndAgent()?但是如何在此级别访问OperationsHelper?
修改
以下是我现在要尝试的内容:
TrackerDevice:
public Iterable<OperationRepresentation> getPendingOps() {
OperationFilter opsFilter = new OperationFilter().byStatus(OperationStatus.PENDING)
.byAgent(this.gid.getValue());
return deviceControl.getOperationsByFilter(opsFilter).get().allPages();
}
我的自定义解析器:
TrackerDevice trackerDevice = trackerAgent.getOrCreateTrackerDevice(reportCtx.getEntry(POS_IMEI));
// Looking into pending operations...
for (OperationRepresentation operation: trackerDevice.getPendingOps()) {
Firmware frm = operation.get(Firmware.class);
// ...for firmware updates
if (frm != null) {
String command = (String) frm.getProperty("command");
// (GL200Fallback associated a command string to these)
if (command != null) {
Matcher m = commandPattern.matcher(command);
// In each command there is a random count number...
if (m.find()) {
String cmdCountNumber = command.substring(m.start(), m.end());
// ...that must match with the acknowledgement's
if (cmdCountNumber.equals(reportCtx.getEntry(POS_COUNT_NUMBER))) {
trackerDevice.setOperationSuccessful(operation);
return true;
}
}
}
}
}
答案 0 :(得分:0)
getOperationsByStatusAndAgent()函数将获取所有跟踪器设备的操作。这可能不是你想要的。
如果检查OperationDispatcher中的startPolling()方法,您将看到代理自动轮询每个跟踪器的操作。这应该在新设备连接或启动代理时自动触发(然后它将开始轮询所有已注册的设备)。
您不需要自行处理新的跟踪器协议。您只需要为实现转换器接口的协议添加类。只要代理收到设备的新操作,就会触发这些操作。
修改强>
如果您想在设备应答后更新操作,可以通过多种方式进行操作。首先,我将使用TrackerDevice中的DeviceControlApi与操作进行交互。它目前没有在TrackerDevice中公开,但您可以更改它。
要稍后更新操作,您需要操作的ID。您可以缓存操作,例如在将设备对象发送到设备后,或者您需要查询它,例如按status和fragmentType