static void subscribeAvis (Elvin* avis, void* closure) { avisSubscription* impl = (avisSubscription*) closure; impl->mAvisSubscription = elvin_subscribe(impl->mAvis, makeAvisSubject(impl->mSubject)); if (impl->mAvisSubscription == NULL) { mama_log (MAMA_LOG_LEVEL_ERROR, "subscribeAvis(): " "Failed to subscribe to: %s", impl->mSubject); wsem_post (&impl->mCreateDestroySem); return; } elvin_subscription_add_listener (impl->mAvisSubscription, avis_callback, impl); mama_log (MAMA_LOG_LEVEL_FINER, "Made Avis subscription to: %s", impl->mSubject); wsem_post (&impl->mCreateDestroySem); }
mama_status avisBridgeMamaSubscription_create (subscriptionBridge* subscriber, const char* source, const char* symbol, mamaTransport transport, mamaQueue queue, mamaMsgCallbacks callback, mamaSubscription subscription, void* closure) { avisSubscription* impl = NULL; if (!subscriber || !subscription || !transport ) return MAMA_STATUS_NULL_ARG; impl = (avisSubscription*)calloc (1, sizeof(avisSubscription)); if (impl == NULL) return MAMA_STATUS_NOMEM; impl->mAvis = getAvis(transport); if (!impl->mAvis) return MAMA_STATUS_INVALID_ARG; if (source != NULL && source[0]) { impl->mSource = source; } else { impl->mSource = ""; } if (symbol != NULL && symbol[0]) { impl->mSymbol = symbol; snprintf (impl->mSubject, sizeof(impl->mSubject), "%s.%s", impl->mSource, impl->mSymbol); } else { impl->mSymbol = ""; snprintf (impl->mSubject, sizeof(impl->mSubject), "%s", impl->mSource ); } impl->mMamaCallback = callback; impl->mMamaSubscription = subscription; impl->mQueue = queue; impl->mTransport = transport; impl->mClosure = closure; impl->mIsNotMuted = 1; impl->mIsValid = 1; impl->mAvisSubscription = elvin_subscribe(impl->mAvis, makeAvisSubject(impl->mSubject)); if (impl->mAvisSubscription == NULL) return MAMA_STATUS_PLATFORM; elvin_subscription_add_listener(impl->mAvisSubscription, avis_callback, impl); mama_log (MAMA_LOG_LEVEL_FINER, "Made Avis subscription to: %s", impl->mSubject); *subscriber = (subscriptionBridge) impl; return MAMA_STATUS_OK; }