The SDK provides various options for subscribing to a project.
EspError * error = esp_error_create();
esp_sdk_start(error);
EspUri * project_uri = esp_uri_create_string("esp://server:port//default/vwap", error);
EspCredentials * creds = esp_credentials_create(ESP_CREDENTIALS_USER_PASSWORD, error);
esp_credentials_set_user(creds, “user”, error);
esp_credentials_set_password(creds, “password”, error);
EspProject * project = esp_project_get(project_uri, creds, NULL, error);
rc = esp_project_connect(project, error);
// Reusing credentials for the subscriber
EspSubscriber * subscriber = esp_project_create_subscriber(project, creds, error);
// Now free credentials
esp_credentials_free(creds, error);
rc = esp_subscriber_connect(subscriber, error);
EspStream * stream = esp_project_get_stream(project, "Trades", error);
rc = esp_subscriber_subsribe(subscriber, stream, error);
while (true) {
EspSubscriberEvent * event = esp_subscriber_get_next_event(subscriber, error);
// process event data
// delete event
esp_subscriber_event_free(event);
}
esp_subscriber_close(subscriber, error);
esp_sdk_close();
const EspStream * stream = esp_subscriber_event_get_stream(event, error);
// stream for this event
EspMessageReader * reader = esp_subscriber_event_get_reader(event, error);
// get message reader
int rc = esp_message_reader_is_block(reader, &flag, error);
// you can check if this a block
const EspSchema * schema = esp_stream_get_schema(stream, error);
// get the stream schema if you do not have it
EspRowReader * row_reader;
int32_t int_value;
int numcolumns = 0, numrows = 0;
int type;
rc = esp_schema_get_numcolumns(schema, &numcolumns, error);
// need to know how many columns are there
while ((row_reader = esp_message_reader_next_row(reader, error)) != NULL) {
// loop until we finish all rows
for (int i = 0; i < numcolumns; ++i) {
rc = esp_row_reader_is_null(row_reader, i, &flag, error);
// if column is null, skip
if ( flag )
continue;
rc = esp_schema_get_column_type(schema, i, &type, error);
switch ( type ) {
case ESP_DATATYPE_INTEGER:
rc = esp_row_reader_get_integer(row_reader, i, &int_value, error);
break;
case ESP_DATATYPE_LONG:
rc = esp_row_reader_get_long(row_reader, i, &long_value, error);
break;
case ESP_DATATYPE_FLOAT:
rc = esp_row_reader_get_float(row_reader, i, &double_value, error);
// ...
// other data types
// ...
}
}
}