Exemplo n.º 1
0
d_storeResult
d_storeMMFKernelAddGroupInfo(
    d_storeMMFKernel _this,
    const d_group group)
{
    d_partition partition;
    d_topic topic;
    d_topicInfo topicInfo;
    d_groupInfo groupInfo;
    v_group vgroup;
    d_storeResult result;

    partition = d_groupGetPartition(group);
    topic = d_groupGetTopic(group);
    topicInfo = d_storeMMFKernelGetTopicInfo(_this, topic);

    if(!topicInfo){
        vgroup = d_groupGetKernelGroup(group);
        topicInfo = d_topicInfoNew(_this, vgroup->topic);

        if(topicInfo){
            c_tableInsert(_this->topics, topicInfo);
        }
    }
    if(topicInfo){
        groupInfo = d_groupInfoNew(_this, topicInfo, group);

        if(groupInfo){
            c_tableInsert(_this->groups, groupInfo);
            c_free(groupInfo);
            result = D_STORE_RESULT_OK;
        } else {
            result = D_STORE_RESULT_ERROR;
        }
        c_free(topicInfo);
    } else {
        result = D_STORE_RESULT_OUT_OF_RESOURCES;
    }
    os_free(partition);
    os_free(topic);

    return result;
}
Exemplo n.º 2
0
d_storeResult
d_groupInfoDataInject(
    d_groupInfo _this,
    const d_store store,
    d_group group)
{
    d_storeResult result;
    struct d_instanceInjectArg inject;
    c_type mmfMessageType;
    c_char* typeName;

    if(_this && group){
        inject.vgroup = d_groupGetKernelGroup(group);

        mmfMessageType = d_topicInfoGetMessageType(_this->topic);
        typeName = c_metaScopedName(c_metaObject(mmfMessageType));

        inject.messageType = c_type(c_metaResolveType(
                c_metaObject(c_getBase(inject.vgroup)), typeName));

        if(inject.messageType){
            inject.result = D_STORE_RESULT_OK;

            c_tableWalk(_this->instances, d_instanceInject, &inject);

            c_free(inject.messageType);
            result = inject.result;
        } else {
            result = D_STORE_RESULT_PRECONDITION_NOT_MET;
        }
        c_free(inject.vgroup);
        c_free(mmfMessageType);
        os_free(typeName);
    } else {
        result = D_STORE_RESULT_ILL_PARAM;
    }
    return result;
}