u_subscriber u_subscriberNew( u_participant p, const c_char *name, v_subscriberQos qos, c_bool enable) { u_subscriber _this = NULL; v_subscriber ks; v_participant kp = NULL; u_result result; if (name == NULL) { name = "No name specified"; } if (p != NULL) { result = u_entityWriteClaim(u_entity(p),(v_entity*)(&kp)); if (result == U_RESULT_OK) { assert(kp); ks = v_subscriberNew(kp,name,qos,enable); if (ks != NULL) { _this = u_entityAlloc(p,u_subscriber,ks,TRUE); if (_this != NULL) { result = u_subscriberInit(_this,p); if (result != U_RESULT_OK) { OS_REPORT_1(OS_ERROR, "u_subscriberNew", 0, "Initialisation failed. " "For DataReader: <%s>.", name); (void)u_subscriberFree(_this); _this = NULL; } } else { OS_REPORT_1(OS_ERROR, "u_subscriberNew", 0, "Create user proxy failed. " "For Subscriber: <%s>.", name); } c_free(ks); } else { OS_REPORT_1(OS_ERROR, "u_subscriberNew", 0, "Create kernel entity failed. " "For Subscriber: <%s>.", name); } result = u_entityRelease(u_entity(p)); if (result != U_RESULT_OK) { OS_REPORT_1(OS_WARNING, "u_subscriberNew", 0, "Could not release participant." "However subscriber <%s> is created.", name); } } else { OS_REPORT_1(OS_WARNING, "u_subscriberNew", 0, "Claim Participant failed. " "For Subscriber: <%s>.", name); } } else { OS_REPORT_1(OS_ERROR,"u_subscriberNew",0, "No Participant specified. " "For Subscriber: <%s>", name); } return _this; }
v_subscriber v_participantGetBuiltinSubscriber( v_participant p) { v_subscriberQos sQos; v_readerQos rQos; v_kernel kernel; c_bool create_builtin_readers = FALSE; assert(p != NULL); assert(C_TYPECHECK(p, v_participant)); c_mutexLock(&p->builtinLock); if (p->builtinSubscriber == NULL) { kernel = v_objectKernel(p); sQos = v_subscriberQosNew(kernel, NULL); sQos->presentation.access_scope = V_PRESENTATION_TOPIC; c_free(sQos->partition); sQos->partition = c_stringNew(c_getBase(c_object(kernel)), V_BUILTIN_PARTITION); sQos->entityFactory.autoenable_created_entities = TRUE; p->builtinSubscriber = v_subscriberNew(p, V_BUILTINSUBSCRIBER_NAME, sQos, TRUE); v_subscriberQosFree(sQos); create_builtin_readers = TRUE; c_mutexUnlock(&p->builtinLock); assert(p->builtinSubscriber != NULL); rQos = v_readerQosNew(kernel, NULL); rQos->durability.kind = V_DURABILITY_TRANSIENT; rQos->reliability.kind = V_RELIABILITY_RELIABLE; rQos->history.kind = V_HISTORY_KEEPLAST; rQos->history.depth = 1; #define _CREATE_READER_(topicName) {\ q_expr expr; \ v_dataReader dr; \ expr = q_parse("select * from " topicName);\ dr = v_dataReaderNew(p->builtinSubscriber, topicName "Reader", \ expr, NULL, rQos, TRUE);\ c_free(dr); \ q_dispose(expr); \ } _CREATE_READER_(V_PARTICIPANTINFO_NAME) _CREATE_READER_(V_TOPICINFO_NAME) _CREATE_READER_(V_PUBLICATIONINFO_NAME) _CREATE_READER_(V_SUBSCRIPTIONINFO_NAME) #undef _CREATE_READER_ v_readerQosFree(rQos); } else { c_mutexUnlock(&p->builtinLock); } return c_keep(p->builtinSubscriber); }