Esempio n. 1
0
/**
 * Class:     org_opensplice_dds_dcps_EntityImpl
 * Method:    jniEnable
 * Signature: ()I
 */
JNIEXPORT jint JNICALL
SAJ_FUNCTION(jniEnable)(
    JNIEnv *env,
    jobject jentity)
{
    gapi_entity entity;
    
    entity = (gapi_entity)saj_read_gapi_address(env, jentity);
    return (jint)gapi_entity_enable(entity); 
}
/*     DomainParticipant
 *     create_participant(
 *         in DomainId_t domainId,
 *         in DomainParticipantQos qos,
 *         in DomainParticipantListener a_listener);
 */
 DDS_DomainParticipant
 DDS_DomainParticipantFactory_create_participant (
         DDS_DomainParticipantFactory _this,
         const DDS_DomainId_t domain_id,
         const DDS_DomainParticipantQos *qos,
         const struct DDS_DomainParticipantListener *a_listener,
         const DDS_StatusMask mask
         )
{
        struct gapi_domainParticipantListener gListener;
        struct gapi_domainParticipantListener *pListener = NULL;
        DDS_DomainParticipant participant;

        if ( a_listener ) {
            sac_copySacDomainParticipantListener(a_listener, &gListener);
            pListener = &gListener;
        }

        participant = (DDS_DomainParticipant) gapi_domainParticipantFactory_create_participant (
            (gapi_domainParticipantFactory)_this,
            (gapi_domainId_t)domain_id,
            (const gapi_domainParticipantQos *)qos,
            (const struct gapi_domainParticipantListener *)pListener,
            (gapi_statusMask) mask,
            NULL, NULL, NULL);
        if ( participant ) {
            if ( sac_builtinTopicRegisterTypeSupport(participant) != DDS_RETCODE_OK ) {
                gapi_domainParticipantFactory_delete_participant(
                    (gapi_domainParticipantFactory)_this,
                    (gapi_domainParticipant) participant);
                participant = NULL;
            }
            else {
                gapi_domainParticipantFactoryQos *dpfqos = gapi_domainParticipantFactoryQos__alloc();
                if(dpfqos){
                    if(gapi_domainParticipantFactory_get_qos(_this, dpfqos) == GAPI_RETCODE_OK){
                        if(dpfqos->entity_factory.autoenable_created_entities) {
                            gapi_entity_enable(participant);
                        }
                    }

                    gapi_free(dpfqos);
                }
            }
        }

        return (DDS_DomainParticipant) participant;
}
Esempio n. 3
0
_Subscriber
_BuiltinSubscriberNew (
    u_participant uParticipant,
    _DomainParticipantFactory factory,
    _DomainParticipant participant)
{
    u_subscriber s;
    _Status status;
    _Subscriber newSubscriber = _SubscriberAlloc();
    gapi_handle handle;
    _TypeSupport typeSupport;
    gapi_dataReaderQos rQos;
    long i;

    s = u_participantGetBuiltinSubscriber(uParticipant);

    if (s) {
        newSubscriber = _SubscriberAlloc();

        if (newSubscriber != NULL) {

            _EntityInit(_Entity(newSubscriber), _Entity(participant));

            U_SUBSCRIBER_SET(newSubscriber, s);

            status = _StatusNew(_Entity(newSubscriber),
                                STATUS_KIND_SUBSCRIBER,
                                NULL, 0);
            if (status) {
                for ( i = 0; i < MAX_BUILTIN_TOPIC; i++ ) {
                    _DataReader reader = NULL;
                    _Topic topic = NULL;

                    typeSupport = _DomainParticipantFindTypeSupport(participant,
                                                                    _BuiltinTopicTypeName(i));
                    if (typeSupport) {
                        c_iter uTopicList;
                        u_topic uTopic;

                        uTopicList = u_participantFindTopic(uParticipant,
                                                            _BuiltinTopicName(i),
                                                            C_TIME_ZERO);
                        uTopic = c_iterTakeFirst(uTopicList);
                        if (uTopic) {
                            topic = _TopicFromKernelTopic(uTopic,
                                                          _BuiltinTopicName(i),
                                                          _BuiltinTopicTypeName(i),
                                                          typeSupport,
                                                          participant,
                                                          NULL);
                            while (uTopic) {
                                uTopic = c_iterTakeFirst(uTopicList);
                                /* multiple instances should not occure but
                                 * just in case this loop frees all references.
                                 */
                                assert(uTopic == NULL);
                                u_entityFree(u_entity(uTopic));
                            }
                        } else {
                            OS_REPORT_2(OS_WARNING,"_BuiltinSubscriberNew",0,
                                        "failed to resolve User layer Topic "
                                        "'%s' for Participant 0x%x",
                                        _BuiltinTopicName(i), participant);
                        }
                    } else {
                        OS_REPORT_2(OS_WARNING,"_BuiltinSubscriberNew",0,
                                    "Builtin TypeSupport for type '%s' is not "
                                    "yet registered for Participant 0x%x",
                                    _BuiltinTopicTypeName(i), participant);
                    }

                    if (topic) {
                        initBuiltinDataReaderQos(&rQos);
                        reader = _DataReaderNew(_TopicDescription(topic),
                                                typeSupport,
                                                &rQos,
                                                NULL, 0,
                                                newSubscriber);

                        _EntityRelease(topic);
                    } else {
                        OS_REPORT_2(OS_WARNING,"_BuiltinSubscriberNew",0,
                                    "failed to create Builtin Topic '%s' "
                                    "for Participant 0x%x",
                                    _BuiltinTopicName(i), participant);
                    }

                    if ( reader ) {
                        _ENTITY_REGISTER_OBJECT(_Entity(newSubscriber),
                                                (_Object)reader);
                        handle = _EntityRelease(reader);
                        gapi_entity_enable(handle);
                    }
                }
                newSubscriber->builtin = TRUE;
                _EntityStatus(newSubscriber) = status;
            } else {
                _EntityDispose(_Entity(newSubscriber));
                newSubscriber = NULL;
            }
        }
    }
    return newSubscriber;
}
Esempio n. 4
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. 5
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;
}