数据操作 编辑文档

本篇文档介绍操作数据的方法。

操作数据包含以下四种方法:

方法 说明
wilddog_getValue() 获取某个节点的数据。
wilddog_setValue() 向某个节点写入数据。若此节点已存在数据,会覆盖这些数据。
wilddog_push() 向某个节点添加子节点。子节点的 key 自动生成并保证唯一,value 是你要写入的数据。
wilddog_removeValue() 删除指定的节点。

获取数据

wilddog_getValue() 方法用于获取某个节点的数据。

wilddog_getValue() 方法可设置回调方法来获取操作的结果。

例如,获取 room 节点数据:



C / RTOS / OpenWRT SDK
Arduino SDK


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

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

//注意,这里省略了对wilddog_getValue返回值的检查
wilddog_getValue(wilddog, p_head, onGetCallback, NULL);

while(1){
//和云端同步
wilddog_trySync();
}
wilddog_destroy(&wilddog);
return 0;
}




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



写入数据

wilddog_setValue() 方法用于向某个节点写入数据。此方法会先清空指定节点,再写入数据。

wilddog_setValue() 方法可设置回调方法来获取操作的结果。

例如,修改 led 状态信息:



C / RTOS / OpenWRT SDK
Arduino SDK


STATIC void onSetCallback(void* arg, Wilddog_Return_T err){
if(err < WILDDOG_HTTP_OK || err >= WILDDOG_HTTP_NOT_MODIFIED){
wilddog_debug("Set value error! Error code is %d", err);
return;
}
wilddog_debug("Set value succeed!");
return;
}
int main(void){
Wilddog_T wilddog = 0;
Wilddog_Node_T *p_head= NULL,*p_node = NULL;

// 本地组装 led 节点,其值为 "on"
p_head = wilddog_node_createObject(NULL);
p_node = wilddog_node_createUString("led","on");
wilddog_node_addChild(p_head, p_node);

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

//注意,这里省略了对wilddog_setValue返回值的检查
wilddog_setValue(wilddog, p_head, onSetCallback, NULL);

//向云端设置完毕,删除本地组装的节点。
wilddog_node_delete(p_head);

while(1){
//和云端同步
wilddog_trySync();
}
wilddog_destroy(&wilddog);
return 0;
}




void setValueCallBack(int error, void* arg){
if(error >= 200 && error < 400){
Serial.print("\n set data success!\n");
}
return;
}
Wilddog *ref = NULL;
void setup{
//<SyncAppID>即你应用的 SyncAppID,"/room" 为 led 节点的上级路径
ref = new Wilddog("coaps://<SyncAppID>.wilddogio.com/room");
ref->setValue("{\"led\":\"on\"}", setValueCallBack, NULL);
return;
}
void loop(){
//和云端同步
if(ref)
ref->trySync();
return;
}



追加子节点

wilddog_push()方法用于向指定节点添加子节点。新增子节点的 key 由 Wilddog Sync 自动生成并保证唯一。 新增子节点的 key 基于时间戳和随机算法生成,并可以按照添加时间进行排序。

wilddog_push() 方法可设置回调方法来获取操作的结果。回调函数中第一个参数为新增节点的完整路径,新增子节点的 key 可以从中获取。

例如,追加子节点到 room 节点下:



C / RTOS / OpenWRT SDK
Arduino SDK


STATIC void onPushCallback(u8 *p_path,void* arg, Wilddog_Return_T err){
if(err < WILDDOG_HTTP_OK || err >= WILDDOG_HTTP_NOT_MODIFIED){
wilddog_debug("push failed, error code is %d", err);
return;
}
//获取新增数据对应的 path
wilddog_debug("new path is %s", p_path);
return;
}

int main(void){
Wilddog_T wilddog = 0;
Wilddog_Node_T * p_node = NULL, *p_head = NULL;

//建立一个object节点,即类似json中的{}
p_head = wilddog_node_createObject(NULL);

//建立一个key为 led,value为 "on" 的节点
p_node = wilddog_node_createUString("led","on");

//将节点p_node添加到object中
wilddog_node_addChild(p_head, p_node);

//<SyncAppID>即你应用的 SyncAppID,"/room" 为要追加节点的上级路径
wilddog = wilddog_initWithUrl("coaps://<SyncAppID>.wilddogio.com/room");

//注意,这里省略了对wilddog_push返回值的检查
wilddog_push(wilddog, p_head, onPushCallback, NULL);

//数据已经推送,删除本地组装的节点。
wilddog_node_delete(p_head);

while(1){
wilddog_trySync();
}
wilddog_destroy(&wilddog);
return 0;
}




void pushValueCallBack(const char *pdata, int error, void* arg){
if(error >= 200 && error < 400){
Serial.print("\n set data success!\n");
}
//获取新增数据对应的 path
if(pdata){
Serial.print("\n get path : ");
Serial.print(pdata);
}
return;
}
Wilddog *ref = NULL;
void setup{
//<SyncAppID>即你应用的 SyncAppID,"/room" 为要追加节点的上级路径
ref = new Wilddog("coaps://<SyncAppID>.wilddogio.com/room");
ref->push("{\"led\":\"on\"}", pushValueCallBack, NULL);
return;
}
void loop(){
//和云端同步
if(ref)
ref->trySync();
return;
}



删除数据

wilddog_removeValue() 方法用于删除指定节点。

例如,删除 room 节点下所有的数据:



C / RTOS / OpenWRT SDK
Arduino SDK


STATIC void onDeleteCallback(void* arg, Wilddog_Return_T err){
if(err < WILDDOG_HTTP_OK || err >= WILDDOG_HTTP_NOT_MODIFIED){
wilddog_debug("Remove value error! Error code is %d", err);
return;
}
wilddog_debug("Remove value succeed!");
return;
}
int main(void){
//用户自定义参数,这里的用途为:初始化为FALSE,回调函数中设为TRUE
//因此可以在main函数中得知是否成功
BOOL isFinished = FALSE;
Wilddog_T wilddog;

//<SyncAppID> 为你自己的SyncAppID
wilddog = wilddog_initWithUrl("coaps://<SyncAppID>.wilddogio.com/room");

//注意,这里省略了对wilddog_removeValue返回值的检查
wilddog_removeValue(wilddog, onDeleteCallback, NULL);

while(1){
wilddog_trySync();
}
wilddog_destroy(&wilddog);
}




void removeValueCallBack(const char *pdata, int error, void* arg){
if(error >= 200 && error < 400){
Serial.print("\n set data success!\n");
}
Serial.print("\n Remove value succeed!");
return;
}
Wilddog *ref = NULL;
void setup{
//<SyncAppID>即你应用的 SyncAppID,"/room" 为要删除节点的路径
ref = new Wilddog("coaps://<SyncAppID>.wilddogio.com/room");
ref->removeValue(removeValueCallBack, NULL);
return;
}
void loop(){
//和云端同步
if(ref)
ref->trySync();
return;
}



野狗新手?
立即注册,为你提供安全可靠的实时通信云服务。
没找到需要的文档?
你可以提交工单反馈 或 阅读常见问题