v_result v_participantWriteCandMCommand(v_participant participant, v_message msg) { v_writeResult wres; v_writer builtinWriter; assert(participant != NULL); assert(C_TYPECHECK(participant,v_participant)); assert(msg != NULL); assert(C_TYPECHECK(msg,v_message)); builtinWriter = v_builtinWriterLookup(v_objectKernel(participant)->builtin, V_C_AND_M_COMMAND_ID); wres = v_writerWrite(builtinWriter, msg, v_timeGet(), NULL); return ( wres == V_WRITE_SUCCESS ? V_RESULT_OK : V_RESULT_INTERNAL_ERROR ); }
void v_writeBuiltinTopic( v_kernel k, enum v_infoId id, v_message msg) { v_writer writer; if (msg != NULL) { if (k->builtin != NULL) { writer = v_builtinWriterLookup(k->builtin,id); if (writer != NULL) { /* No need to fill writerGID, this is done by the writer */ v_writerWrite(writer,msg,v_timeGet(),NULL); } } } }
void cmx_writerCopy( v_entity entity, c_voidp args) { v_writer kw; v_message message; void *to; sd_serializer ser; sd_serializedData data; sd_validationResult valResult; struct cmx_writerArg *arg; arg = (struct cmx_writerArg *)args; kw = v_writer(entity); message = v_topicMessageNew(kw->topic); to = C_DISPLACE(message,v_topicDataOffset(kw->topic)); ser = sd_serializerXMLNewTyped(v_topicDataType(kw->topic)); data = sd_serializerFromString(ser, arg->result); sd_serializerDeserializeIntoValidated(ser, data, to); valResult = sd_serializerLastValidationResult(ser); if(valResult != SD_VAL_SUCCESS){ OS_REPORT_2(OS_ERROR, CM_XML_CONTEXT, 0, "Write of userdata failed.\nReason: %s\nError: %s\n", sd_serializerLastValidationMessage(ser), sd_serializerLastValidationLocation(ser)); arg->success = CMX_RESULT_FAILED; } else { arg->success = CMX_RESULT_OK; } sd_serializedDataFree(data); sd_serializerFree(ser); /* Note that the last param of v_writerWrite is NULL, performance can be improved if the instance is provided. */ v_writerWrite(kw,message,v_timeGet(),NULL); c_free(message); }