예제 #1
0
 static void remove_state_writer ()
 {
	DDS_ReturnCode_t error;

	DDS_DataWriter_set_listener (dw, NULL, 0);
	if ((error = DDS_Publisher_delete_datawriter (pub, dw)))
		fatal ("DDS_Publisher_delete_datawriter() failed (%s)!", DDS_error (error));

	if ((error = DDS_Publisher_delete_contained_entities (pub)))
		fatal ("DDS_Publisher_delete_contained_entities () failed (%s)!", DDS_error (error));
}
예제 #2
0
int
dds_datawriter_set_listener(
    dds_entity_t e,
    const dds_writerlistener_t *listener)
{
    DDS_ReturnCode_t result           = DDS_RETCODE_ERROR;
    struct DataWriterInfo *info       = NULL;
    struct DDS_DataWriterListener dpl = {NULL, NULL, NULL, NULL, NULL};
    dds_writerlistener_t *newListener = NULL;
    dds_writerlistener_t *oldListener = NULL;
    DDS_StatusMask mask               = 0;

    DDS_REPORT_STACK();

    result = DDS_Entity_claim_user_data(e, (DDS_EntityUserData *)&info);
    if (result == DDS_RETCODE_OK) {
        oldListener = info->listener;
        if (listener) {
            newListener = os_malloc(sizeof(dds_writerlistener_t));
            *newListener = *listener;
            mask = dds_status_get_enabled(e);
            info->listener = newListener;
            dds_datawriter_listener_init(&dpl, info);
        } else {
            mask = 0;
            info->listener = NULL;
        }
        result = DDS_DataWriter_set_listener(e, &dpl, mask);
        DDS_Entity_release_user_data((DDS_EntityUserData)info);
        os_free(oldListener);
    }

    DDS_REPORT_FLUSH(e, result != DDS_RETCODE_OK);

    return DDS_ERRNO(result, DDS_MOD_WRITER, DDS_ERR_Mx);
}