mama_status mamaDQPublisherManager_addPublisher ( mamaDQPublisherManager manager, const char *symbol, mamaDQPublisher pub, void * cache) { mamaPublishTopic* newTopic = NULL; mamaDQPublisherManagerImpl* impl = (mamaDQPublisherManagerImpl*) manager; newTopic = (mamaPublishTopic*) wtable_lookup (impl->mPublisherMap, (char*)symbol); if (!newTopic) { newTopic = (mamaPublishTopic*) calloc (1, sizeof (mamaPublishTopic)); newTopic->pub = pub; newTopic->cache = cache; newTopic->symbol = strdup(symbol); if (wtable_insert (impl->mPublisherMap, (char*)symbol, newTopic) != 1) return MAMA_STATUS_INVALID_ARG; } else return MAMA_STATUS_INVALID_ARG; return MAMA_STATUS_OK; }
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 MamaSource::addSubscription (const char* symbol, MamaSubscription* sub) { if (!mySubs) { mySubs = wtable_create ("MamaSource::mySubs", 100); } MamaSubscription* foundSub = (MamaSubscription*) wtable_lookup (mySubs, symbol); if (foundSub) { return; } wtable_insert (mySubs, symbol, sub); }
int updateStatisticsCache(statsCache* sCache , const char* msgCategoryName , long numBytesRecieved, long timeSecs, long timeMicroSecs, double cLatency, struct timeval tv) { int ret; perfData *mPData = NULL; double latency = 0; if(timeSecs != 0 || timeMicroSecs != 0) calcLatency(timeSecs,timeMicroSecs,&latency,tv); else latency=cLatency; if(sCache->mNumMsg>0 && sCache->mSymbolTable) { /* More than one category*/ mPData = (perfData*) wtable_lookup (sCache->mSymbolTable,msgCategoryName); /* If category doesn't already exist*/ if (!mPData) { /* Then create & init*/ mPData = (perfData*)calloc(1,sizeof(perfData)); initPerfData(mPData,sCache->mOutfile,msgCategoryName); } } else { /* No categories */ mPData = sCache->mPData; } /* Update statistics for period */ mPData->mMsgCountP++; mPData->mByteCountP += (double)numBytesRecieved; /* change to get rid of spurious results*/ /* if (latency > 0) */ if (/*latency >0 &&*/ latency<999999999) { mPData->mLatMsgCountP++; mPData->mLatAccumP += latency; if (latency < mPData->mMinLatencyP) { mPData->mMinLatencyP = latency; } if (latency > mPData->mMaxLatencyP) { mPData->mMaxLatencyP = latency; } mPData->mLatSquareP += (latency*latency); } /* Update table in structure if more than one category*/ if(sCache->mNumMsg>0) { ret= wtable_insert(sCache->mSymbolTable,msgCategoryName, (void*) mPData); if(ret>0) { /*error in insert*/ } } sCache->mNumMessages++; sCache->mNumBytes+=numBytesRecieved; return STATS_OK; }