Esempio n. 1
0
/**
 * Class:     org_opensplice_dds_dcps_PublisherImpl
 * Method:    jniSetListener
 * Signature: (LDDS/PublisherListener;I)I
 */
JNIEXPORT jint JNICALL
SAJ_FUNCTION(jniSetListener)(
    JNIEnv *env,
    jobject jpublisher,
    jobject jlistener,
    jint jmask)
{
    struct gapi_publisherListener *listener;
    gapi_publisher publisher;
    gapi_returnCode_t grc;
    
    publisher = (gapi_publisher)saj_read_gapi_address(env, jpublisher);
    listener = saj_publisherListenerNew(env, jlistener);
    grc = gapi_publisher_set_listener(publisher, listener, 
                                                    (unsigned long int)jmask);
    
    if(grc == GAPI_RETCODE_OK){
        if(listener != NULL){
            saj_write_java_listener_address(env, publisher, listener->listener_data);
        }
    } else if(listener != NULL){
        saj_listenerDataFree(env, saj_listenerData(listener->listener_data));
    } 
    return (jint)grc; 
}
Esempio n. 2
0
/**
 * Class:     org_opensplice_dds_dcps_DataWriterImpl
 * Method:    jniSetListener
 * Signature: (LDDS/DataWriterListener;I)I
 */
JNIEXPORT jint JNICALL
SAJ_FUNCTION(jniSetListener)(
    JNIEnv *env,
    jobject jdataWriter,
    jobject jlistener,
    jint jmask)
{
    struct gapi_dataWriterListener *listener;
    gapi_dataWriter dataWriter;
    gapi_returnCode_t grc;

    dataWriter = (gapi_dataWriter)saj_read_gapi_address(env, jdataWriter);
    listener = saj_dataWriterListenerNew(env, jlistener);

    if(listener != NULL){
        saj_write_java_listener_address(env, dataWriter, listener->listener_data);
    }
    grc = gapi_dataWriter_set_listener(dataWriter, listener,
                                                    (unsigned long int)jmask);

    if((grc != GAPI_RETCODE_OK) && (listener != NULL)){
        saj_listenerDataFree(env, saj_listenerData(listener->listener_data));
    }
    return (jint)grc;
}
Esempio n. 3
0
void
saj_destroy_user_data(
    JNIEnv *env,
    saj_userData ud)
{
    /*
     * Because of multithread issues the supplied data might be NULL.
     */
    if(ud != NULL){
        if(ud->listenerData != NULL){
            saj_listenerDataFree(env, ud->listenerData);
        }
        if(ud->statusConditionUserData != NULL){
            saj_destroy_user_data(env, ud->statusConditionUserData);
        }
        (*env)->DeleteGlobalRef(env, ud->saj_object);
        saj_exceptionCheck(env);
    }
}
Esempio n. 4
0
void
saj_write_java_listener_address(
    JNIEnv *env,
    gapi_object gapi_obj,
    saj_listenerData listenerData)
{
    saj_userData ud;

    assert(env != NULL);
    assert(listenerData != NULL);

    if(gapi_obj != GAPI_OBJECT_NIL){
        ud = saj_userData(gapi_object_get_user_data(gapi_obj));

        if(ud != NULL){
            if(ud->listenerData != NULL){
                saj_listenerDataFree(env, ud->listenerData);
                ud->listenerData = NULL;
            }
            ud->listenerData = listenerData;
            gapi_object_set_user_data(gapi_obj, (void*)ud,NULL,NULL);
        }
    }
}
Esempio n. 5
0
/**
 * Class:     org_opensplice_dds_dcps_PublisherImpl
 * Method:    jniCreateDatawriter
 * Signature: (LDDS/Topic;LDDS/DataWriterQos;LDDS/DataWriterListener;)LDDS/DataWriter;
 */
JNIEXPORT jobject JNICALL
SAJ_FUNCTION(jniCreateDatawriter)(
    JNIEnv *env, 
    jobject jpublisher,
    jobject jtopic,
    jobject jqos,
    jobject jlistener,
    jint jmask)
{
    jobject jwriter;
    gapi_publisher publisher;
    gapi_dataWriter writer;
    gapi_dataWriterQos* writerQos;
    gapi_topic topic;
    gapi_domainParticipant participant;
    gapi_typeSupport typeSupport;
    const struct gapi_dataWriterListener *listener;
    gapi_char* dataWriterClassName;
    saj_returnCode rc;
    gapi_string typeName;
    gapi_char* signature;
    jobject jtypeSupport;
    
    jwriter = NULL;
    listener = NULL;
    writer = GAPI_OBJECT_NIL;
    
    publisher = (gapi_publisher) saj_read_gapi_address(env, jpublisher);
    participant = gapi_publisher_get_participant(publisher);
    topic = (gapi_topic) saj_read_gapi_address(env, jtopic);
    
    typeName = gapi_topicDescription_get_type_name((gapi_topicDescription)topic);
    typeSupport = gapi_domainParticipant_get_typesupport(participant, (const gapi_char*) typeName);
    gapi_free(typeName);
                                                
    jtypeSupport = saj_read_java_address((gapi_object)typeSupport);
    rc = saj_LookupTypeSupportDataWriter(env, jtypeSupport, &dataWriterClassName);
    
    if(rc == SAJ_RETCODE_OK){
        if ((*env)->IsSameObject (env, jqos, GET_CACHED(DATAWRITER_QOS_DEFAULT)) == JNI_TRUE) {
            writerQos = (gapi_dataWriterQos *)GAPI_DATAWRITER_QOS_DEFAULT;
            rc = SAJ_RETCODE_OK;
        } else if ((*env)->IsSameObject (env, jqos, GET_CACHED(DATAWRITER_QOS_USE_TOPIC_QOS)) == JNI_TRUE) {
            writerQos = (gapi_dataWriterQos *)GAPI_DATAWRITER_QOS_USE_TOPIC_QOS;
            rc = SAJ_RETCODE_OK;
        } else {
            writerQos = gapi_dataWriterQos__alloc();
            rc = saj_DataWriterQosCopyIn(env, jqos, writerQos);
	}
        
        if(rc == SAJ_RETCODE_OK){
            listener = saj_dataWriterListenerNew(env, jlistener);
            writer = gapi_publisher_create_datawriter(publisher, topic, writerQos, 
                                                                        listener, (gapi_statusMask)jmask);
                    
            if (writer != GAPI_OBJECT_NIL){
                rc = saj_LookupTypeSupportConstructorSignature(env, jtypeSupport, &signature);
                
                if(rc == SAJ_RETCODE_OK){
                    gapi_publisherQos *pqos = gapi_publisherQos__alloc();
                    rc = saj_construct_typed_java_object(env, 
                                                        dataWriterClassName, 
                                                        (PA_ADDRCAST)writer, 
                                                        &jwriter, signature,
                                                        jtypeSupport);

                    gapi_free(signature);
                    
                    if(listener != NULL){
                        saj_write_java_listener_address(env, writer, listener->listener_data);
                    }

                    if(pqos){
                        if(gapi_publisher_get_qos(publisher, pqos) == GAPI_RETCODE_OK){
                            if(pqos->entity_factory.autoenable_created_entities) {
                                gapi_entity_enable(writer);
                            }
                        }
                        gapi_free(pqos);
                    }

                }
            } else if(listener != NULL){
                saj_listenerDataFree(env, saj_listenerData(listener->listener_data));
            }
        }
        if ((writerQos != (gapi_dataWriterQos *)GAPI_DATAWRITER_QOS_DEFAULT) &&
	    (writerQos != (gapi_dataWriterQos *)GAPI_DATAWRITER_QOS_USE_TOPIC_QOS)) {
	    gapi_free(writerQos);
	}
        gapi_free(dataWriterClassName);
    } 
    return jwriter;
}
Esempio n. 6
0
/**
 * Class:     org_opensplice_dds_dcps_SubscriberImpl
 * Method:    jniCreateDatareader
 * Signature: (LDDS/TopicDescription;LDDS/DataReaderQos;LDDS/DataReaderListener;)LDDS/DataReader;
 */
JNIEXPORT jobject JNICALL
SAJ_FUNCTION(jniCreateDatareader)(
    JNIEnv *env,
    jobject jsubscriber,
    jobject jdescription,
    jobject jqos,
    jobject jlistener,
    jint jmask)
{
    jobject jreader;
    jobject jtypeSupport;
    gapi_subscriber subscriber;
    gapi_dataReader reader;
    gapi_dataReaderQos* readerQos;
    gapi_domainParticipant participant;
    gapi_typeSupport typeSupport;
    gapi_string typeName;
    gapi_topicDescription description;
    struct gapi_dataReaderListener *listener;
    gapi_char* dataReaderClassName;
    gapi_char* signature;
    saj_returnCode rc;

    listener = NULL;
    jreader = NULL;
    reader = GAPI_OBJECT_NIL;

    subscriber = (gapi_subscriber) saj_read_gapi_address(env, jsubscriber);
    participant = gapi_subscriber_get_participant(subscriber);
    description = (gapi_topicDescription) saj_read_gapi_address(env, jdescription);

    typeName = gapi_topicDescription_get_type_name(description);
    typeSupport = gapi_domainParticipant_get_typesupport(participant, (const gapi_char*) typeName);
    gapi_free(typeName);

    jtypeSupport = saj_read_java_address((gapi_object)typeSupport);
    rc = saj_LookupTypeSupportDataReader(env, jtypeSupport, &dataReaderClassName);

    if(rc == SAJ_RETCODE_OK){
        if ((*env)->IsSameObject (env, jqos, GET_CACHED(DATAREADER_QOS_DEFAULT)) == JNI_TRUE) {
            readerQos = (gapi_dataReaderQos *)GAPI_DATAREADER_QOS_DEFAULT;
            rc = SAJ_RETCODE_OK;
        } else if ((*env)->IsSameObject (env, jqos, GET_CACHED(DATAREADER_QOS_USE_TOPIC_QOS)) == JNI_TRUE) {
            readerQos = (gapi_dataReaderQos *)GAPI_DATAREADER_QOS_USE_TOPIC_QOS;
            rc = SAJ_RETCODE_OK;
        } else {
            readerQos = gapi_dataReaderQos__alloc();
            rc = saj_DataReaderQosCopyIn(env, jqos, readerQos);
        }

        if(rc == SAJ_RETCODE_OK){
            listener = saj_dataReaderListenerNew(env, jlistener);
            reader = gapi_subscriber_create_datareader(subscriber, description,
                                                        readerQos, listener, (gapi_statusMask)jmask);

            if (reader != GAPI_OBJECT_NIL){
                rc = saj_LookupTypeSupportConstructorSignature(env, jtypeSupport, &signature);

                if(rc == SAJ_RETCODE_OK){
                    gapi_subscriberQos *sqos = gapi_subscriberQos__alloc();
                    rc = saj_construct_typed_java_object(env, dataReaderClassName,
                                                        (PA_ADDRCAST)reader,
                                                        &jreader, signature,
                                                        jtypeSupport);
                    gapi_free(signature);

                    if(listener != NULL){
                        saj_write_java_listener_address(env, reader, listener->listener_data);
                    }

                    if(sqos){
                        if(gapi_subscriber_get_qos(subscriber, sqos) == GAPI_RETCODE_OK){
                            if(sqos->entity_factory.autoenable_created_entities) {
                                gapi_entity_enable(reader);
                            }
                        }
                        gapi_free(sqos);
                    }
                }
            } else if(listener != NULL){
                saj_listenerDataFree(env, saj_listenerData(listener->listener_data));
            }
        }
        if ((readerQos != (gapi_dataReaderQos *)GAPI_DATAREADER_QOS_DEFAULT) &&
            (readerQos != (gapi_dataReaderQos *)GAPI_DATAREADER_QOS_USE_TOPIC_QOS)) {
            gapi_free(readerQos);
        }
        gapi_free(dataReaderClassName);
    }

    return jreader;
}