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); }
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); }