示例#1
0
mama_status mamaDQPublisherManager_createPublisher (
    mamaDQPublisherManager manager,
    const char *symbol,
    void * cache,
    mamaDQPublisher *newPublisher)
{
    mamaDQPublisherManagerImpl* impl  = (mamaDQPublisherManagerImpl*) manager;
    mamaPublishTopic* newTopic = NULL;
    mama_status status = MAMA_STATUS_OK;
    char* topic;
    int length = 0;

    newTopic =  (mamaPublishTopic*)wtable_lookup (impl->mPublisherMap, (char*)symbol);

    if (!newTopic)
    {
        if ((status = mamaDQPublisher_allocate(newPublisher)) == MAMA_STATUS_OK)
        {
            newTopic =  (mamaPublishTopic*) calloc (1, sizeof (mamaPublishTopic));

            newTopic->pub = *newPublisher;
            newTopic->cache = cache;
            newTopic->symbol = strdup(symbol);

            mamaDQPublisher_setCache(*newPublisher, cache);
            mamaDQPublisher_setSenderId(*newPublisher,  impl->mSenderId);
            mamaDQPublisher_setStatus(*newPublisher,  impl->mStatus);
            mamaDQPublisher_setSeqNum(*newPublisher, impl->mSeqNum);
            mamaDQPublisher_enableSendTime(*newPublisher, impl->mEnableSendTime);

            length = strlen(impl->mNameSpace) + 1 + (strlen(symbol) + 1);
            topic = calloc(length, sizeof(char));
            strcpy (topic, impl->mNameSpace);
            strcat (topic, ".");
            strcat (topic, symbol);

            if ((status = mamaDQPublisher_create(*newPublisher,
                                                 impl->mTransport, topic)) != MAMA_STATUS_OK)
            {
                free (topic);
                return status;
            }
            free (topic);

            if (wtable_insert  (impl->mPublisherMap, (char*)symbol, newTopic) != 1)
            {
                mamaDQPublisher_destroy(*newPublisher);
                free  ((void*)newTopic->symbol);
                free  ((void*)newTopic);
                return status;
            }
            return MAMA_STATUS_OK;
        }
        return status;
    }

    return (MAMA_STATUS_INVALID_ARG);
}
示例#2
0
void MAMACALLTYPE
subscriptionOnMsg  (mamaSubscription subscription,
                    mamaMsg msg,
                    void *closure,
                    void *itemClosure)
{
    pubCache* cache = (pubCache*) closure;
    switch (mamaMsgType_typeForMsg (msg))
    {
    case MAMA_MSG_TYPE_DELETE:
    case MAMA_MSG_TYPE_EXPIRE:
        mamaSubscription_destroy (subscription);
        mamaSubscription_deallocate (subscription);
        if (cache->pub)
            mamaDQPublisher_send(cache->pub, msg);
        cache->sub = NULL;
        return;
    default:
        break;
    }

    switch (mamaMsgStatus_statusForMsg (msg))
    {
    case MAMA_MSG_STATUS_BAD_SYMBOL:
    case MAMA_MSG_STATUS_EXPIRED:
    case MAMA_MSG_STATUS_TIMEOUT:
        mamaSubscription_destroy (subscription);
        mamaSubscription_deallocate (subscription);
        if (cache->pub)
            mamaDQPublisher_send(cache->pub, msg);
        cache->sub = NULL;
        return;
    default:
        break;
    }

    mamaMsg_applyMsg(cache->cachedMsg, msg);

    if (cache->pub)
    {
        mamaDQPublisher_setStatus(cache->pub, mamaMsgStatus_statusForMsg (msg));
        mamaDQPublisher_send(cache->pub, msg);
    }

    fflush(stdout);
}
void  MamaDQPublisher::setStatus (mamaMsgStatus  status)
{
	mamaDQPublisher_setStatus(mImpl->mDQPublisher, status);
}