c_char* cmx_writerNew( const c_char* publisher, const c_char* name, const c_char* topic, const c_char* qos) { u_publisher pub; u_topic top; u_writer wri; c_char* result; cmx_entityArg arg; u_result ur; cmx_entityKernelArg kernelArg; v_writerQos wQos; result = NULL; pub = u_publisher(cmx_entityUserEntity(publisher)); if(pub != NULL){ top = u_topic(cmx_entityUserEntity(topic)); if(top != NULL){ kernelArg = cmx_entityKernelArg(os_malloc(C_SIZEOF(cmx_entityKernelArg))); u_entityAction(u_entity(pub), cmx_entityKernelAction, (c_voidp)kernelArg); if(qos != NULL){ wQos = v_writerQos(cmx_qosKernelQosFromKind(qos, K_WRITER, c_getBase(c_object(kernelArg->kernel)))); if(wQos == NULL){ wQos = v_writerQosNew(kernelArg->kernel, NULL); wQos->reliability.kind = V_RELIABILITY_RELIABLE; } } else { wQos = v_writerQosNew(kernelArg->kernel, NULL); wQos->reliability.kind = V_RELIABILITY_RELIABLE; } wri = u_writerNew(pub, name, top, NULL, wQos, TRUE); os_free(kernelArg); c_free(wQos); if(wri != NULL){ cmx_registerEntity(u_entity(wri)); arg = cmx_entityArg(os_malloc(C_SIZEOF(cmx_entityArg))); arg->entity = u_entity(wri); arg->create = FALSE; arg->participant = NULL; arg->result = NULL; ur = u_entityAction(u_entity(wri), cmx_entityNewFromAction, (c_voidp)(arg)); if(ur == U_RESULT_OK){ result = arg->result; os_free(arg); } } } } return result; }
const c_char* cmx_dataReaderWaitForHistoricalData( const c_char* dataReader, const c_time timeout) { u_result ur; const c_char* result; u_dataReader entity; entity = u_dataReader(cmx_entityUserEntity(dataReader)); if(entity != NULL){ ur = u_dataReaderWaitForHistoricalData(entity, timeout); if(ur == U_RESULT_OK){ result = CMX_RESULT_OK; } else if(ur == U_RESULT_TIMEOUT){ result = CMX_RESULT_TIMEOUT; } else { result = CMX_RESULT_FAILED; } } else { result = CMX_RESULT_ENTITY_NOT_AVAILABLE; } return result; }
c_char* cmx_readerSnapshotNew( const c_char* reader) { u_entity e; c_char* result; struct cmx_readerSnapshotArg arg; os_mutex m; arg.success = FALSE; result = NULL; e = cmx_entityUserEntity(reader); if(e != NULL){ u_entityAction(e, cmx_readerSnapshotNewAction, &arg); if(arg.success == TRUE){ m = cmx_getReaderSnapshotMutex(); os_mutexLock(&m); readerSnapshots = c_iterInsert(readerSnapshots, arg.snapshot); os_mutexUnlock(&m); result = (c_char*)(os_malloc(60)); os_sprintf(result, "<readerSnapshot><id>"PA_ADDRFMT"</id></readerSnapshot>", (c_address)(arg.snapshot)); } } return result; }
c_char* cmx_serviceGetState( const c_char* service) { u_entity uservice; u_result actionSuccess; cmx_entityArg arg; c_char* result; result = NULL; uservice = cmx_entityUserEntity(service); if(uservice != NULL){ arg = cmx_entityArg(os_malloc(C_SIZEOF(cmx_entityArg))); arg->participant = u_entityParticipant(uservice); arg->create = FALSE; arg->result = NULL; arg->entity = NULL; actionSuccess = u_entityAction(uservice, cmx_serviceAction, arg); if(actionSuccess == U_RESULT_OK){ result = arg->result; os_free(arg); } } return result; }
c_char* cmx_publisherNew( const c_char* participant, const c_char* name, const c_char* qos) { u_participant par; u_publisher pub; c_char* result; cmx_entityArg arg; u_result ur; v_publisherQos pqos; cmx_entityKernelArg kernelArg; result = NULL; par = u_participant(cmx_entityUserEntity(participant)); if(par != NULL){ kernelArg = cmx_entityKernelArg(os_malloc(C_SIZEOF(cmx_entityKernelArg))); u_entityAction(u_entity(par), cmx_entityKernelAction, (c_voidp)kernelArg); if(qos != NULL){ pqos = v_publisherQos(cmx_qosKernelQosFromKind(qos, K_PUBLISHER, c_getBase(c_object(kernelArg->kernel)))); if(pqos == NULL){ pqos = v_publisherQosNew(kernelArg->kernel, NULL); } } else { pqos = v_publisherQosNew(kernelArg->kernel, NULL); } pub = u_publisherNew(par, name, pqos, TRUE); os_free(kernelArg); c_free(pqos); if(pub != NULL){ cmx_registerEntity(u_entity(pub)); arg = cmx_entityArg(os_malloc(C_SIZEOF(cmx_entityArg))); arg->entity = u_entity(pub); arg->create = FALSE; arg->participant = NULL; arg->result = NULL; ur = u_entityAction(u_entity(pub), cmx_entityNewFromAction, (c_voidp)(arg)); if(ur == U_RESULT_OK){ result = arg->result; os_free(arg); } } } return result; }
c_char* cmx_readerDataType( const c_char* reader) { u_entity entity; struct cmx_readerArg arg; entity = cmx_entityUserEntity(reader); arg.result = NULL; if(entity != NULL){ u_entityAction(entity, cmx_readerDataTypeAction, &arg); } return arg.result; }
const c_char* cmx_serviceSetState( const c_char* service, const c_char* state) { const c_char* result; u_entity uservice; uservice = cmx_entityUserEntity(service); result = CMX_RESULT_FAILED; if(uservice != NULL){ /*@todo TODO: Implement state change.*/ result = CMX_RESULT_OK; } return result; }
c_char* cmx_readerTake( const c_char* reader) { u_reader ureader; struct cmx_readerArg arg; arg.result = NULL; ureader = u_reader(cmx_entityUserEntity(reader)); if(ureader != NULL){ u_readerTake(ureader, cmx_readerCopy, &arg); } return arg.result; }
c_char* cmx_readerRead( const c_char* reader) { u_reader ureader; c_bool result; struct cmx_readerArg arg; ureader = u_reader(cmx_entityUserEntity(reader)); arg.result = NULL; if(ureader != NULL){ result = u_readerRead(ureader, cmx_readerReadCopy, &arg); } return arg.result; }
c_char* cmx_writerDataType( const c_char* writer) { u_entity entity; c_bool result; c_char* type; struct cmx_writerTypeArg arg; type = NULL; entity = cmx_entityUserEntity(writer); arg.result = NULL; if(entity != NULL){ result = u_entityAction(entity, cmx_writerDataTypeAction, &arg); } return arg.result; }
const c_char* cmx_writerUnregister( const c_char* writer, const c_char* data) { u_entity entity; c_bool result; c_char* type; struct cmx_writerArg arg; type = NULL; entity = cmx_entityUserEntity(writer); arg.result = data; if(entity != NULL){ result = u_entityAction(entity, cmx_writerUnregisterCopy, &arg); } return arg.success; }
c_char* cmx_queryNew( const c_char* reader, const c_char* name, const c_char* expression) { u_reader rea; u_query que; q_expr qexpr; c_char* result; cmx_entityArg arg; u_result ur; result = NULL; rea = u_reader(cmx_entityUserEntity(reader)); if(rea != NULL){ qexpr = q_parse(expression); if(qexpr != NULL){ que = u_queryNew(rea, name, qexpr, NULL); q_dispose(qexpr); if(que != NULL){ cmx_registerEntity(u_entity(que)); arg = cmx_entityArg(os_malloc(C_SIZEOF(cmx_entityArg))); arg->entity = u_entity(que); arg->create = FALSE; arg->participant = NULL; arg->result = NULL; ur = u_entityAction(u_entity(que), cmx_entityNewFromAction, (c_voidp)(arg)); if(ur == U_RESULT_OK){ result = arg->result; os_free(arg); } } } } return result; }
const c_char* cmx_publisherPublish( const c_char* publisher, const c_char* domainExpr) { u_publisher pub; u_result ur; const c_char* result; pub = u_publisher(cmx_entityUserEntity(publisher)); if(pub != NULL){ ur = u_publisherPublish(pub, domainExpr); if(ur == U_RESULT_OK){ result = CMX_RESULT_OK; } else { result = CMX_RESULT_FAILED; } } else { result = CMX_RESULT_FAILED; } return result; }
c_char* cmx_dataReaderNew( const c_char* subscriber, const c_char* name, const c_char* view, const c_char* qos) { u_subscriber sub; u_dataReader rea; c_char* result; cmx_entityArg arg; u_result ur; cmx_entityKernelArg kernelArg; v_readerQos rqos; q_expr qexpr; result = NULL; sub = u_subscriber(cmx_entityUserEntity(subscriber)); if(sub != NULL){ kernelArg = cmx_entityKernelArg(os_malloc(C_SIZEOF(cmx_entityKernelArg))); u_entityAction(u_entity(sub), cmx_entityKernelAction, (c_voidp)kernelArg); if(qos != NULL){ rqos = v_readerQos(cmx_qosKernelQosFromKind(qos, K_DATAREADER, c_getBase(c_object(kernelArg->kernel)))); if(rqos == NULL){ rqos = v_readerQosNew(kernelArg->kernel, NULL); } } else { rqos = v_readerQosNew(kernelArg->kernel, NULL); } if(view != NULL){ qexpr = q_parse(view); if(qexpr != NULL){ rea = u_dataReaderNew(sub, name, qexpr, NULL, rqos, TRUE); q_dispose(qexpr); } else { rea = NULL; OS_REPORT(OS_ERROR, CM_XML_CONTEXT, 0, "cmx_dataReaderNew: invalid view expression."); } } else { rea = u_dataReaderNew(sub, name, NULL, NULL, rqos, TRUE); } c_free(rqos); os_free(kernelArg); if(rea != NULL){ cmx_registerEntity(u_entity(rea)); arg = cmx_entityArg(os_malloc((os_uint32)(C_SIZEOF(cmx_entityArg)))); arg->entity = u_entity(rea); arg->create = FALSE; arg->participant = NULL; arg->result = NULL; ur = u_entityAction(u_entity(rea), cmx_entityNewFromAction, (c_voidp)(arg)); if(ur == U_RESULT_OK){ result = arg->result; os_free(arg); } } } return result; }