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 subscriptionHandlerOnRequestCb (mamaDQPublisherManager manager, mamaPublishTopic* publishTopicInfo, short subType, short msgType, mamaMsg msg) { recapInfo* info = NULL; pubCache* cache = NULL; mamaQueue queue; printf ("Received request: %s\n", publishTopicInfo->symbol); switch (msgType) { case MAMA_SUBSC_SUBSCRIBE: case MAMA_SUBSC_SNAPSHOT: mamaMsg_detach (msg); info = (recapInfo*) calloc (1, sizeof(recapInfo)); cache = publishTopicInfo->cache; info->index = cache->index; info->msg = msg; mamaSubscription_getQueue(cache->sub, &queue); mamaQueue_enqueueEvent (queue, sendRecap, info); 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: info = (recapInfo*) calloc (1, sizeof(recapInfo)); cache = publishTopicInfo->cache; info->index = cache->index; mamaSubscription_getQueue(cache->sub, &queue); mamaQueue_enqueueEvent (queue, sendRecap, info); break; case MAMA_SUBSC_UNSUBSCRIBE: case MAMA_SUBSC_RESUBSCRIBE: case MAMA_SUBSC_REFRESH: default: break; } }
/* Description: Load the middleware bridge, initialize MAMA, begin * processing messages in a non-default thread, stop * processing on the non-default thread, close MAMA. * * Expected Result: MAMA_STATUS_OK */ TEST_F (MamaOpenCloseTestC, StartStopDifferentThreads) { mamaBridge bridge; ASSERT_EQ (MAMA_STATUS_OK, mama_loadBridge (&bridge, getMiddleware())); ASSERT_EQ (MAMA_STATUS_OK, mama_open()); /* Start mama in the background so it uses a different thread */ wsem_t sem; mamaQueue defaultQueue; ASSERT_EQ (0, wsem_init (&sem, 0, 0)); ASSERT_EQ (MAMA_STATUS_OK, mama_getDefaultEventQueue (bridge, &defaultQueue)); ASSERT_EQ (MAMA_STATUS_OK, mamaQueue_enqueueEvent (defaultQueue, onEventStop, bridge)); ASSERT_EQ (MAMA_STATUS_OK, mama_startBackgroundEx (bridge, startCallback, &sem)); ASSERT_EQ (0, wsem_wait (&sem)); ASSERT_EQ (MAMA_STATUS_OK, mama_close()); }
static void avis_callback( Subscription* subcription, Attributes* attributes, bool secure, void* subscriber) { /* cant do anything without a subscriber */ if (!avisSub(subscriber)) { mama_log (MAMA_LOG_LEVEL_ERROR, "avis_callback(): called with NULL subscriber!"); return; } /*Make sure that the subscription is processing messages*/ if ((!avisSub(subscriber)->mIsNotMuted) || (!avisSub(subscriber)->mIsValid)) return; avisCallbackContext* ctx = (avisCallbackContext*) malloc (sizeof (avisCallbackContext)); ctx->attributes = attributes_clone (attributes); ctx->subscriber = subscriber; mamaQueue_enqueueEvent (avisSub (subscriber)->mQueue, avis_queue_callback, ctx); }