/** * 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; }
_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; }
/** * 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; }
/** * 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; }