mama_status avisBridgeMamaSubscription_mute (subscriptionBridge subscriber) { CHECK_SUBSCRIBER(subscriber); avisSub(subscriber)->mIsNotMuted = 0; return MAMA_STATUS_OK; }
mama_status avisBridgeMamaSubscription_destroy (subscriptionBridge subscriber) { mama_status status = MAMA_STATUS_OK; wombatQueue queue = NULL; CHECK_SUBSCRIBER(subscriber); elvin_subscription_remove_listener(avisSub(subscriber)->mAvisSubscription, avis_callback); if (!elvin_unsubscribe(avisSub(subscriber)->mAvis, avisSub(subscriber)->mAvisSubscription)) { // NOTE: elvin_unsubscribe sometimes returns failure for no apparent reason, so dont log errors here: // 2011-09-02 11:59:10: avis error code=2, error msg=Illegal frame size: 61 //log_avis_error(MAMA_LOG_LEVEL_ERROR, avisSub(subscriber)->mAvis); //status = MAMA_STATUS_PLATFORM; } free(avisSub(subscriber)->mAvisSubscription); mamaQueue_getNativeHandle(avisSub(subscriber)->mQueue, &queue); if (!queue) { mama_log (MAMA_LOG_LEVEL_ERROR, "avis_callback(): " "Could not get event queue."); return MAMA_STATUS_PLATFORM; } wombatQueue_enqueue (queue, destroy_callback, (void*)subscriber, NULL); return status; }
mama_status tick42rmdsBridgeMamaSubscription_create (subscriptionBridge* subscriber, const char* source, const char* symbol, mamaTransport transport, mamaQueue queue, mamaMsgCallbacks callback, mamaSubscription subscription, void* closure) { CHECK_SUBSCRIBER(subscriber); mama_status status; // get hold of the bridge implementation mamaBridgeImpl* bridgeImpl = mamaTransportImpl_getBridgeImpl(transport); if (!bridgeImpl) { mama_log (MAMA_LOG_LEVEL_ERROR, "tick42rmdsBridgeMamaSubscription_create(): Could not get bridge"); return MAMA_STATUS_PLATFORM; } RMDSBridgeImpl* upaBridge = NULL; if (MAMA_STATUS_OK != (status = mamaBridgeImpl_getClosure((mamaBridge) bridgeImpl, (void**) &upaBridge))) { mama_log (MAMA_LOG_LEVEL_ERROR, "tick42rmdsBridgeMamaSubscription_create(): Could not get UPA bridge object"); return status; } // actually lookup on the transport itself RMDSSubscriber_ptr_t sub = upaBridge->getTransportBridge(transport)->Subscriber(); sub->AddSubscription(subscriber, source, symbol, transport, queue, callback, subscription, closure); return MAMA_STATUS_OK; }
mama_status avisBridgeMamaSubscription_getPlatformError (subscriptionBridge subscriber, void** error) { CHECK_SUBSCRIBER(subscriber); *error = &(avisSub(subscriber)->mAvis->error); return MAMA_STATUS_OK; }
mama_status tick42rmdsBridgeMamaSubscription_mute (subscriptionBridge subscriber) { CHECK_SUBSCRIBER(subscriber); // Get the Bridge subscription object RMDSBridgeSubscription* pSubscription = RMDSBridgeSub(subscriber); // set the shutdown flag on the subscription; // this will block if in a callback and also will signal that no further callbacks should be made pSubscription->Shutdown(); return MAMA_STATUS_OK; }
mama_status avisBridgeMamaSubscription_destroy (subscriptionBridge subscriber) { mama_status status = MAMA_STATUS_OK; wombatQueue queue = NULL; avisTransportBridge* avisTransport = NULL; CHECK_SUBSCRIBER(subscriber); mamaTransport_getBridgeTransport ( avisSub(subscriber)->mTransport, (void*) &avisTransport); if (!avisTransport) return MAMA_STATUS_INVALID_ARG; if (avisTransportBridge_isDispatching (avisTransport)) { elvin_invoke (avisSub(subscriber)->mAvis, &unsubscribeAvis, avisSub(subscriber)->mAvisSubscription); } else { unsubscribeAvis (avisSub(subscriber)->mAvis, avisSub(subscriber)->mAvisSubscription); } avisSub(subscriber)->mAvisSubscription = NULL; mamaQueue_getNativeHandle(avisSub(subscriber)->mQueue, &queue); if (!queue) { mama_log (MAMA_LOG_LEVEL_ERROR, "avisBridgeMamaSubscription_destroy(): " "Could not get event queue."); return MAMA_STATUS_PLATFORM; } avisSub(subscriber)->mMamaCallback.onDestroy ( avisSub(subscriber)->mMamaSubscription, avisSub(subscriber)->mClosure); wsem_destroy(&avisSub(subscriber)->mCreateDestroySem); free(avisSub(subscriber)->mSubject); free(avisSub(subscriber)); return status; }
mama_status tick42rmdsBridgeMamaSubscription_destroy (subscriptionBridge subscriber) { CHECK_SUBSCRIBER(subscriber); // Get the Bridge subscription object RMDSBridgeSubscription* pSubscription = RMDSBridgeSub(subscriber); mama_status status; // get hold of the bridge implementation mamaBridgeImpl* bridgeImpl = mamaTransportImpl_getBridgeImpl(pSubscription->Transport()); if (!bridgeImpl) { mama_log (MAMA_LOG_LEVEL_ERROR, "tick42rmdsBridgeMamaSubscription_destroy(): Could not get bridge"); return MAMA_STATUS_PLATFORM; } RMDSBridgeImpl* upaBridge = NULL; if (MAMA_STATUS_OK != (status = mamaBridgeImpl_getClosure((mamaBridge) bridgeImpl, (void**) &upaBridge))) { mama_log (MAMA_LOG_LEVEL_ERROR, "tick42rmdsBridgeMamaSubscription_destroy(): Could not get UPA bridge object"); return status; } RMDSSubscriber_ptr_t sub = upaBridge->getTransportBridge(pSubscription->Transport())->Subscriber(); // grab stuff for onDestroyCB from our object before we kill it void * closure = pSubscription->Closure(); wombat_subscriptionDestroyCB destroyCb = pSubscription->Callback().onDestroy; mamaSubscription parent = pSubscription->Subscription(); sub->RemoveSubscription(pSubscription); //Invoke the subscription callback to inform that the bridge has been //destroyed. if (NULL != destroyCb) (*(wombat_subscriptionDestroyCB)destroyCb)(parent, closure); return MAMA_STATUS_OK; }
int avisBridgeMamaSubscription_isTportDisconnected (subscriptionBridge subscriber) { CHECK_SUBSCRIBER(subscriber); return elvin_is_open(avisSub(subscriber)->mAvis) ? 0 : 1; }