/// <summary> /// Apply an update of the subscription structute on current event, based on request data. /// </summary> public void SubscriptionUpdate(EventSubscriptionRequest request) { if (request.SenderId == null) { #if Matrix_Diagnostics SystemMonitor.OperationError("Proxy call or proxy call sender not found in a super pool subscription update."); #endif return; } if (request == null) { #if Matrix_Diagnostics SystemMonitor.Error(string.Format("Subscription request not available, subscription failed, delegate method [{0}].", request.DelegateInstanceMethodInfo.ToString())); #endif return; } ReadOnlyCollection <ClientId> sources = request.EventsSources; if (sources != null && sources.Count > 0) { foreach (ClientId id in sources) { DoUpdateSubscription(request.SenderId, request.DelegateInstanceMethodInfo, id, request.IsAdd, request.SpecificCountOptional); } } else {// Single subscribe to all. DoUpdateSubscription(request.SenderId, request.DelegateInstanceMethodInfo, SubscribeToAllId, request.IsAdd, request.SpecificCountOptional); } }
/// <summary> /// Gather a lsit of update requests, related to a specific target. /// </summary> /// <returns></returns> public List <EventSubscriptionRequest> GatherSourceRelatedUpdates(ClientId sourceId) { List <EventSubscriptionRequest> result = new List <EventSubscriptionRequest>(); HotSwapDictionary <ClientId, ClientEventSubscriptionInfo> values; if (_subscriptionsHotSwap.TryGetValue(sourceId, out values)) { foreach (KeyValuePair <ClientId, ClientEventSubscriptionInfo> pair in values) { foreach (KeyValuePair <MethodInfo, int> subPair in pair.Value.Data) { EventSubscriptionRequest request = new EventSubscriptionRequest(sourceId); request.DelegateInstanceMethodInfo = subPair.Key; request.SpecificCountOptional = subPair.Value; request.ExtendedEventName = _extendedEventName; request.SenderId = pair.Key; request.IsAdd = true; result.Add(request); } } } //foreach (KeyValuePair<MessageBusClientId, HotSwapDictionary<MessageBusClientId, ClientEventSubscriptionInfo>> pair // in _subscriptionsHotSwap) //{ // ClientEventSubscriptionInfo info; // if (pair.Value.TryGetValue(sourceId, out info)) // { // foreach (KeyValuePair<MethodInfo, int> subPair in info.Data) // { // EventSubscriptionRequest request = new EventSubscriptionRequest(sourceId); // request.DelegateInstanceMethodInfo = subPair.Key; // request.SpecificCountOptional = subPair.Value; // request.ExtendedEventName = _extendedEventName; // request.SenderId = pair.Key; // request.IsAdd = true; // result.Add(request); // } // } //} return(result); }
/// <summary> /// Gather a lsit of update requests, related to a specific target. /// </summary> /// <returns></returns> public List<EventSubscriptionRequest> GatherSourceRelatedUpdates(ClientId sourceId) { List<EventSubscriptionRequest> result = new List<EventSubscriptionRequest>(); HotSwapDictionary<ClientId, ClientEventSubscriptionInfo> values; if (_subscriptionsHotSwap.TryGetValue(sourceId, out values)) { foreach (KeyValuePair<ClientId, ClientEventSubscriptionInfo> pair in values) { foreach (KeyValuePair<MethodInfo, int> subPair in pair.Value.Data) { EventSubscriptionRequest request = new EventSubscriptionRequest(sourceId); request.DelegateInstanceMethodInfo = subPair.Key; request.SpecificCountOptional = subPair.Value; request.ExtendedEventName = _extendedEventName; request.SenderId = pair.Key; request.IsAdd = true; result.Add(request); } } } //foreach (KeyValuePair<MessageBusClientId, HotSwapDictionary<MessageBusClientId, ClientEventSubscriptionInfo>> pair // in _subscriptionsHotSwap) //{ // ClientEventSubscriptionInfo info; // if (pair.Value.TryGetValue(sourceId, out info)) // { // foreach (KeyValuePair<MethodInfo, int> subPair in info.Data) // { // EventSubscriptionRequest request = new EventSubscriptionRequest(sourceId); // request.DelegateInstanceMethodInfo = subPair.Key; // request.SpecificCountOptional = subPair.Value; // request.ExtendedEventName = _extendedEventName; // request.SenderId = pair.Key; // request.IsAdd = true; // result.Add(request); // } // } //} return result; }
/// <summary> /// Apply an update of the subscription structute on current event, based on request data. /// </summary> public void SubscriptionUpdate(EventSubscriptionRequest request) { if (request.SenderId == null) { #if Matrix_Diagnostics SystemMonitor.OperationError("Proxy call or proxy call sender not found in a super pool subscription update."); #endif return; } if (request == null) { #if Matrix_Diagnostics SystemMonitor.Error(string.Format("Subscription request not available, subscription failed, delegate method [{0}].", request.DelegateInstanceMethodInfo.ToString())); #endif return; } ReadOnlyCollection<ClientId> sources = request.EventsSources; if (sources != null && sources.Count > 0) { foreach (ClientId id in sources) { DoUpdateSubscription(request.SenderId, request.DelegateInstanceMethodInfo, id, request.IsAdd, request.SpecificCountOptional); } } else {// Single subscribe to all. DoUpdateSubscription(request.SenderId, request.DelegateInstanceMethodInfo, SubscribeToAllId, request.IsAdd, request.SpecificCountOptional); } }
/// <summary> /// Clear instance. /// </summary> public void Clear() { Mode = ModeEnum.Default; Processed = false; RequestConfirmTimeout = null; SubscriptionRequest = null; MethodId = null; ReturnType = null; Parameters = null; MethodInfo = null; ReceiversIds = null; Sender = null; Timeout = null; AsyncResultDelegate = null; AsyncResultState = null; AsyncResultTimeout = null; }