mco_iot_replicator_create
此函数创建一个复制器对象,并将句柄返回至 repl
中。
一旦复制器创建完成,数据库句柄 db
即不再需要。
例如,可通过 mco_db_disconnect()
关闭连接。在配对的复制器被销毁之前,通信器 comm
不得被销毁。
MCO_RET mco_iot_replicator_create(
mco_db_h db,
mco_iot_comm_h comm,
mco_iot_replicator_params_t *params,
/* OUT */ mco_iot_replicator_h *repl
);
有关概述,请参阅主动复制结构页面。
参数
db
mco_db_h
数据库连接句柄。
comm
mco_iot_comm_h
通过 mco_iot_comm_create()
函数创建的通信器对象句柄。
params
mco_iot_replicator_params_t
包含已初始化参数的结构体。
repl
mco_iot_replicator_h
复制器对象句柄。
返回
MCO_S_OK
复制器成功创建。
MCO_E_IOT_INVALID_HANDLE
无效的数据库 db
或通信器 comm
句柄。
MCO_E_IOT_NOT_INITIALIZED
物联网运行时未初始化,或者数据库模式中未声明物联网。
MCO_E_NOMEM
无法为复制器数据结构分配内存。
MCO_E_SESLIMIT
如果函数无法创建数据库连接,则出现其他connect()
错误。
示例
下面的代码片段初始化了 ARF(物联网)运行时,打开并连接数据库,然后创建了通信器和复制器对象:
int main(int argc, char *argv[])
{
mco_db_params_t db_params;
mco_device_t dev;
mco_db_h db;
mco_iot_replicator_params_t repl_params;
mco_iot_comm_params_t comm_params;
mco_iot_replicator_h repl;
mco_iot_comm_h comm;
const char *conn_string = (argc > 1) ? argv[1] : "127.0.0.1:15000";
...
/* Initialize SmartEDB and IoT runtimes */
mco_error_set_handler(&sample_errhandler);
mco_runtime_start();
mco_iot_init();
/* Create database */
dev.type = MCO_MEMORY_CONV;
dev.assignment = MCO_MEMORY_ASSIGN_DATABASE;
dev.size = DEVICE_DATABASE_SIZE;
dev.dev.conv.ptr = (void*)malloc(dev.size);
mco_db_params_init (&db_params);
db_params.db_max_connections = 5;
if (argc > 2) {
db_params.iot_agent_id = atoi(argv[2]); /* Override the agent_id in the schema */
}
CHECK(mco_db_open_dev(db_name, iotdevice_get_dictionary(), &dev, 1, &db_params));
CHECK(mco_db_connect(db_name, &db));
mco_iot_comm_params_init(&comm_params);
CHECK(mco_iot_comm_create(&comm_params, &comm));
mco_iot_replicator_params_init(&repl_params);
CHECK(mco_iot_replicator_create(db, comm, &repl_params, &repl));
...
}
文件
- 头文件:
mcoiot.h
- 源文件:
mcoiotrepl.c
- 库:
libmcoiotrepl.a