static void MAMACALLTYPE subscriptionHandlerOnRequestCb (mamaDQPublisherManager manager, mamaPublishTopic* publishTopicInfo, short subType, short msgType, mamaMsg msg) { int index =0; mama_log (MAMA_LOG_LEVEL_NORMAL, "Received request: %s", publishTopicInfo->symbol); switch (msgType) { case MAMA_SUBSC_SUBSCRIBE: case MAMA_SUBSC_SNAPSHOT: index = ((pubCache*) publishTopicInfo->cache)->index; 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; case MAMA_SUBSC_DQ_SUBSCRIBER: case MAMA_SUBSC_DQ_PUBLISHER: case MAMA_SUBSC_DQ_NETWORK: case MAMA_SUBSC_DQ_UNKNOWN: case MAMA_SUBSC_DQ_GROUP_SUBSCRIBER: index = (int) ((pubCache*)publishTopicInfo->cache)->index; mamaMsg_updateU8 (gSubscriptionList[index].cachedMsg, NULL, MamaFieldMsgType.mFid, MAMA_MSG_TYPE_RECAP); mamaDQPublisher_send (gSubscriptionList[index].pub, gSubscriptionList[index].cachedMsg); break; case MAMA_SUBSC_UNSUBSCRIBE: case MAMA_SUBSC_RESUBSCRIBE: case MAMA_SUBSC_REFRESH: default: break; } }
static void MAMACALLTYPE sendRecap (mamaQueue queue, void* closure) { recapInfo* info = (recapInfo*) closure; mamaMsg_updateU8(gSubscriptionList[info->index].cachedMsg, NULL, MamaFieldMsgType.mFid, MAMA_MSG_TYPE_INITIAL); if (info->msg) { mamaDQPublisher_sendReply(gSubscriptionList[info->index].pub, info->msg, gSubscriptionList[info->index].cachedMsg); mamaMsg_destroy( info->msg); } else mamaDQPublisher_send(gSubscriptionList[info->index].pub, gSubscriptionList[info->index].cachedMsg); free (info); }
void MamaDQPublisher::sendReply (const MamaMsg& request, MamaMsg* reply) const { mamaDQPublisher_sendReply(mImpl->mDQPublisher, request.getUnderlyingMsg(), reply->getUnderlyingMsg()); }
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; } } }