//New VersionExchange added to the collection:
            protected override object SetUpMember(int index, object member)
            {
                VersionExchange ve = (VersionExchange)member;

                //Set up an event handler to send outbound responses in all cases:
                using (Synchronizer.Lock(ve.SyncRoot)) {
                    ve.Changed["SendVersionResponse"].Add(new PropertyEventHandler(SendVersionResponseHandler));
                    if (ve.SendVersionResponse != null)
                    {
                        Trace.WriteLine("VersionExchangeCollection.SetUpMember: VersionResponseMessage already set before event handler added: Sending response now.");
                        SendVersionResponse(ve, ve.SendVersionResponse);
                    }
                }

                //Send a request only if the VersionExchange is configured for it; Instructor nodes initiate the exchange.
                if (ve.SendRequest)
                {
                    VersionRequestMessage vrm = new VersionRequestMessage();
                    vrm.Group = new SingletonGroup(ve.RemoteParticipant);
                    vrm.Tags  = new MessageTags();
                    vrm.Tags.BridgePriority = MessagePriority.Lowest;
                    m_Service.m_Sender.Send(vrm);
                    Trace.WriteLine("Sent VersionRequestMessage to Participant ID: " + ve.RemoteParticipant.Guid.ToString());
                }
                return(null); //No tag needed
            }
 private void SendVersionResponse(VersionExchange ve, VersionResponseMessage vrm)
 {
     vrm.Group = new SingletonGroup(ve.RemoteParticipant);
     vrm.Tags  = new MessageTags();
     vrm.Tags.BridgePriority = MessagePriority.Lowest;
     m_Service.m_Sender.Send(vrm);
     Trace.WriteLine("Sent VersionResponseMessage to Participant ID: " + ve.RemoteParticipant.Guid.ToString());
 }
            //Send a VersionResponesMessage
            private void SendVersionResponseHandler(object sender, PropertyEventArgs args)
            {
                VersionExchange         ve   = (VersionExchange)sender;
                PropertyChangeEventArgs pcea = (PropertyChangeEventArgs)args;

                if (pcea.NewValue != null)
                {
                    VersionResponseMessage vrm = (VersionResponseMessage)(pcea.NewValue);
                    SendVersionResponse(ve, vrm);
                }
            }
            protected override void TearDownMember(int index, object member, object tag)
            {
                VersionExchange ve = (VersionExchange)member;

                ve.Changed["SendVersionResponse"].Remove(new PropertyEventHandler(SendVersionResponseHandler));
            }