//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)); }