Stop the communicator.
MCO_RET mco_iot_comm_stop(mco_iot_comm_h comm)
| comm | The communicator object |
The function stops the communicator "gracefully"; i.e. it waits for all active and queued callbacks to complete. Also the work flows for all connections are consistent, e.g. for each active connection the onDisconnect() and onDestroy() callbacks are called.
| MCO_S_OK | Communicator successfully stopped |
| MCO_E_IOT_INVALID_HANDLE | The communicator handle comm is invalid |
The code snippet below initializes the ARF (IoT) runtime, opens and connects the database, creates the communicator then stops the communicator:
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 eXtremeDB 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));
...
CHECK(mco_iot_comm_stop(comm));
...
}