事件监听 编辑文档

事件监听是指通过事件触发的方式来获取云端变化的数据。通过监听云端事件,本地获取并处理数据,保持和数据实时同步。

事件

数据在云端发生变化后会触发事件。

事件包含以下几种:

事件类型 说明
WD_ET_VALUECHANGE 初始化监听或指定节点及子节点数据变化时触发。

注意:


每当指定节点下的数据(包括更深层节点数据)发生改变时,都会触发 WD_ET_VALUECHANGE 事件。所以,为了聚焦你关心的数据,你应该把监听的节点路径设置的更加精确。例如,尽量不要在根节点设置 WD_ET_VALUECHANGE 事件监听。

监听数据

通过 Wilddog Sync 提供的方法,监听云端的事件,保持和云端实时同步。

设置监听

例如,通过 wilddog_addObserver() 方法配合 WD_ET_VALUECHANGE 事件监听 Jobs 节点下的数据:



C / RTOS / OpenWRT SDK
Arduino SDK


STATIC void onObserverCallback(Wilddog_Node_T *p_snapshot, void* arg, Wilddog_Return_T err){
if(err < WILDDOG_HTTP_OK || err >= WILDDOG_HTTP_NOT_MODIFIED){
wilddog_debug("Observe value error! Error code is %d", err);
return;
}
//打印监听到的新节点数据
wilddog_debug_printnode(p_snapshot);
return;
}
int main(void){
Wilddog_T wilddog = 0;

//<SyncAppID>即你应用的 SyncAppID,"/Jobs" 为节点的路径
wilddog = wilddog_initWithUrl("coaps://<SyncAppID>.wilddogio.com/Jobs");

//注意,这里省略了对wilddog_addObserver返回值的检查
wilddog_addObserver(wilddog, WD_ET_VALUECHANGE, onObserverCallback, NULL);
while(1){
//和云端同步
wilddog_trySync();
}
wilddog_destroy(&wilddog);
return 0;
}




void onObserverCallback(const char *pdata, int error, void* arg){
if(error >= 200 && error < 400){
Serial.print("\n get data success!\n");
}
Serial.print("\n Observe data : ");
Serial.print(pdata);
return;
}
Wilddog *ref = NULL;
void setup{
//<SyncAppID>即你应用的 SyncAppID,"/Jobs" 为节点的路径
ref = new Wilddog("coaps://<SyncAppID>.wilddogio.com/Jobs");
ref->addObserver(WD_ET_VALUECHANGE, onObserverCallback, NULL);
return;
}
void loop(){
//和云端同步
if(ref)
ref->trySync();
return;
}




提示:


如果你只想获取数据,可使用wilddog_getValue()方法。

移除监听

wilddog_removeObserver() 方法用于移除指定事件。移除监听之后,事件回调方法将不会被触发。



C / RTOS / OpenWRT SDK
Arduino SDK


int main(void){
Wilddog_T wilddog = 0;

//<SyncAppID>即你应用的 SyncAppID,"/Jobs" 为节点的路径
wilddog = wilddog_initWithUrl("coaps://<SyncAppID>.wilddogio.com/Jobs");

//注意,这里省略了对wilddog_removeObserver返回值的检查
wilddog_removeObserver(wilddog, WD_ET_VALUECHANGE);
while(1){
//和云端同步
wilddog_trySync();
}
wilddog_destroy(&wilddog);
return 0;
}




Wilddog *ref = NULL;
void setup{
//<SyncAppID>即你应用的 SyncAppID,"/Jobs" 为节点的路径
ref = new Wilddog("coaps://<SyncAppID>.wilddogio.com/Jobs");
ref->removeObserver(WD_ET_VALUECHANGE);
return;
}
void loop(){
//和云端同步
if(ref)
ref->trySync();
return;
}




注意:


在父节点上调用 wilddog_removeObserver() 方法时不会移除在其子节点上添加的监听。
野狗新手?
立即注册,为你提供安全可靠的实时通信云服务。
没找到需要的文档?
你可以提交工单反馈 或 阅读常见问题