static void MAMACALLTYPE subscriptionHandlerOnNewRequestCb (mamaDQPublisherManager manager, const char* symbol, short subType, short msgType, mamaMsg msg) { int i = 0; mamaQueue queue; recapInfo* info = NULL; for (i=0; i < gNumSymbols; i++) { if (strcmp (gSubscriptionList[i].symbol, symbol) == 0) break; } if (i == gNumSymbols) { printf ("Received request for unknown symbol: %s\n", symbol); return; } mamaDQPublisherManager_createPublisher (manager, symbol, (void*)i, &gSubscriptionList[i].pub); printf ("Received new request: %s\n", symbol); info = (recapInfo*) calloc (1, sizeof(recapInfo)); info->index =i; mamaSubscription_getQueue(gSubscriptionList[i].sub, &queue); switch (msgType) { case MAMA_SUBSC_SUBSCRIBE: case MAMA_SUBSC_SNAPSHOT: mamaMsg_detach (msg); info->msg = msg; mamaQueue_enqueueEvent (queue, sendRecap, info); break; default: mamaQueue_enqueueEvent (queue, sendRecap, info); break; } }
static void MAMACALLTYPE subscriptionHandlerOnNewRequestCb (mamaDQPublisherManager manager, const char* symbol, short subType, short msgType, mamaMsg msg) { int index = 0; char* headerString; char *temp; char * source; mamaMsg newMessage; for (index=0; index < gNumSymbols; index++) { if (strcmp (gSubscriptionList[index].symbol, symbol) == 0) break; } if (index == gNumSymbols) { mama_log (MAMA_LOG_LEVEL_WARN, "Received request for unknown symbol: %s", symbol); return; } mama_log (MAMA_LOG_LEVEL_NORMAL, "Received new request: %s", symbol); mamaDQPublisherManager_createPublisher (manager, symbol, (void*)&gSubscriptionList[index], &gSubscriptionList[index].pub); mamaPlaybackFileParser_allocate (&gSubscriptionList[index].fileParser); mamaPlaybackFileParser_openFile(gSubscriptionList[index].fileParser, (char*)gFilename); mamaMsg_create(&gSubscriptionList[index].cachedMsg); while (mamaPlaybackFileParser_getNextHeader(gSubscriptionList[index].fileParser, &headerString)) { /* skip source and transport name */ temp = strchr (headerString,DELIM); temp++; source = strchr (temp,DELIM); source++; /* skip : */ temp = strchr (source,DELIM); if ((strncmp (gSubscriptionList[index].symbol, source, temp-source) == 0) && (strlen(gSubscriptionList[index].symbol) == temp-source)) break; mamaPlaybackFileParser_getNextMsg (gSubscriptionList[index].fileParser, &newMessage); } if (mamaPlaybackFileParser_getNextMsg (gSubscriptionList[index].fileParser, &newMessage)) { mamaMsg_applyMsg (gSubscriptionList[index].cachedMsg, newMessage); switch (msgType) { case MAMA_SUBSC_SUBSCRIBE: case MAMA_SUBSC_SNAPSHOT: if (subType == MAMA_SUBSC_TYPE_BOOK) { mamaMsg_updateU8 (gSubscriptionList[index].cachedMsg, NULL, MamaFieldMsgType.mFid, MAMA_MSG_TYPE_BOOK_INITIAL); } else { mamaMsg_updateU8 (gSubscriptionList[index].cachedMsg, NULL, MamaFieldMsgType.mFid, MAMA_MSG_TYPE_INITIAL); } mamaDQPublisher_sendReply (gSubscriptionList[index].pub, msg, gSubscriptionList[index].cachedMsg); break; default: mama_log (MAMA_LOG_LEVEL_NORMAL, "Publishing MAMA_MSG_TYPE_RECAP"); mamaMsg_updateU8 (gSubscriptionList[index].cachedMsg, NULL, MamaFieldMsgType.mFid, MAMA_MSG_TYPE_RECAP); mamaDQPublisher_send (gSubscriptionList[index].pub, gSubscriptionList[index].cachedMsg); break; } } }