67 lines
1.8 KiB
C
67 lines
1.8 KiB
C
// A simple demo for asynchronous subscription.
|
|
// compile with:
|
|
// gcc -o subscribe_demo subscribe_demo.c -ltaos
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <taos.h>
|
|
|
|
int nTotalRows;
|
|
|
|
/**
|
|
* @brief callback function of subscription.
|
|
*
|
|
* @param tsub
|
|
* @param res
|
|
* @param param. the additional parameter passed to taos_subscribe
|
|
* @param code. error code
|
|
*/
|
|
void subscribe_callback(TAOS_SUB* tsub, TAOS_RES* res, void* param, int code) {
|
|
if (code != 0) {
|
|
printf("error: %d\n", code);
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
TAOS_ROW row = NULL;
|
|
int num_fields = taos_num_fields(res);
|
|
TAOS_FIELD* fields = taos_fetch_fields(res);
|
|
int nRows = 0;
|
|
|
|
while ((row = taos_fetch_row(res))) {
|
|
char buf[4096] = {0};
|
|
taos_print_row(buf, row, fields, num_fields);
|
|
puts(buf);
|
|
nRows++;
|
|
}
|
|
|
|
nTotalRows += nRows;
|
|
printf("%d rows consumed.\n", nRows);
|
|
}
|
|
|
|
int main() {
|
|
TAOS* taos = taos_connect("localhost", "root", "taosdata", NULL, 6030);
|
|
if (taos == NULL) {
|
|
printf("failed to connect to server\n");
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
int restart = 1; // if the topic already exists, where to subscribe from the begin.
|
|
const char* topic = "topic-meter-current-bg-10";
|
|
const char* sql = "select * from power.meters where current > 10";
|
|
void* param = NULL; // additional parameter.
|
|
int interval = 2000; // consumption interval in microseconds.
|
|
TAOS_SUB* tsub = taos_subscribe(taos, restart, topic, sql, subscribe_callback, NULL, interval);
|
|
|
|
// wait for insert from others process. you can open TDengine CLI to insert some records for test.
|
|
|
|
getchar(); // press Enter to stop
|
|
|
|
printf("total rows consumed: %d\n", nTotalRows);
|
|
int keep = 0; // whether to keep subscribe process
|
|
taos_unsubscribe(tsub, keep);
|
|
|
|
taos_close(taos);
|
|
taos_cleanup();
|
|
}
|