public virtual bool IsEngaged(Party party, EngagementProfile engagementProfile)
        {
            bool isEngaged = false;

            if (party != null)
            {
                switch (engagementProfile)
                {
                case EngagementProfile.Client:
                    isEngaged = EngagedParties.Values.Contains(party);
                    break;

                case EngagementProfile.Owner:
                    isEngaged = EngagedParties.Keys.Contains(party);
                    break;

                case EngagementProfile.Any:
                    isEngaged = (EngagedParties.Values.Contains(party) || EngagedParties.Keys.Contains(party));
                    break;

                default:
                    break;
                }
            }

            return(isEngaged);
        }
        public virtual IList <MessageRouterResult> RemoveEngagement(Party party, EngagementProfile engagementProfile)
        {
            IList <MessageRouterResult> messageRouterResults = new List <MessageRouterResult>();

            if (party != null)
            {
                List <Party> keysToRemove = new List <Party>();

                foreach (var partyPair in EngagedParties)
                {
                    bool removeThisPair = false;

                    switch (engagementProfile)
                    {
                    case EngagementProfile.Client:
                        removeThisPair = partyPair.Value.Equals(party);
                        break;

                    case EngagementProfile.Owner:
                        removeThisPair = partyPair.Key.Equals(party);
                        break;

                    case EngagementProfile.Any:
                        removeThisPair = (partyPair.Value.Equals(party) || partyPair.Key.Equals(party));
                        break;

                    default:
                        break;
                    }

                    if (removeThisPair)
                    {
                        keysToRemove.Add(partyPair.Key);

                        if (engagementProfile == EngagementProfile.Owner)
                        {
                            // Since owner is the key in the dictionary, there can be only one
                            break;
                        }
                    }
                }

                messageRouterResults = RemoveEngagements(keysToRemove);
            }

            return(messageRouterResults);
        }
 public IList <MessageRouterResult> RemoveEngagement(Party party, EngagementProfile engagementProfile)
 {
     throw new NotImplementedException();
 }
 public bool IsEngaged(Party party, EngagementProfile engagementProfile)
 {
     throw new NotImplementedException();
 }