本篇文档介绍操作数据的方法。
操作数据包含以下四种方法:
方法 |
说明 |
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; wilddog = wilddog_initWithUrl("coaps://<SyncAppID>.wilddogio.com/room");
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{ 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;
p_head = wilddog_node_createObject(NULL); p_node = wilddog_node_createUString("led","on"); wilddog_node_addChild(p_head, p_node); wilddog = wilddog_initWithUrl("coaps://<SyncAppID>.wilddogio.com/room");
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{ 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; } 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;
p_head = wilddog_node_createObject(NULL);
p_node = wilddog_node_createUString("led","on");
wilddog_node_addChild(p_head, p_node); wilddog = wilddog_initWithUrl("coaps://<SyncAppID>.wilddogio.com/room");
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"); } if(pdata){ Serial.print("\n get path : "); Serial.print(pdata); } return; } Wilddog *ref = NULL; void setup{ 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){ BOOL isFinished = FALSE; Wilddog_T wilddog; wilddog = wilddog_initWithUrl("coaps://<SyncAppID>.wilddogio.com/room");
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{ ref = new Wilddog("coaps://<SyncAppID>.wilddogio.com/room"); ref->removeValue(removeValueCallBack, NULL); return; } void loop(){ if(ref) ref->trySync(); return; }
|