/// <summary> /// Handles the group communication message. /// </summary> private void Handle(NsMessage <GeneralGroupCommunicationMessage> value, bool isRegistration = false) { // This is mainly used to handle the case should ObserverContainer // decide to trigger handlers concurrently for a single message. if (isRegistration) { // Process the registration message _registrationMessage = value; } else if (_registrationMessage != null && value == _registrationMessage) { // This means that we've already processed the message. // Ignore this message and discard the reference. _registrationMessage = null; return; } var gcMessage = value.Data.First(); IObserver <NsMessage <GeneralGroupCommunicationMessage> > observer; if (!_observers.TryGetValue(NodeObserverIdentifier.FromMessage(gcMessage), out observer)) { throw new InvalidOperationException(); } observer.OnNext(value); }
/// <summary> /// Compare equality of instance fields. /// </summary> private bool Equals(NodeObserverIdentifier other) { return(_type == other.Type && _groupName.Equals(other.GroupName) && _operatorName.Equals(other.OperatorName)); }
/// <summary> /// Registers a node associated with the Task. /// </summary> public void RegisterNodeObserver <T>(NodeMessageObserver <T> observer) { _observers.Add(NodeObserverIdentifier.FromObserver(observer), observer); }