private void SendSlideInformation(SlideModel slide, Group receivers) { Message message, deck; message = new PresentationInformationMessage(this.m_Presentation); message.Group = receivers; message.InsertChild(deck = new DeckInformationMessage(this.m_Deck)); // Ensure that nothing about the slide can change between sending the slide's information // and creating the SlideNetworkService to listen for changes. // TODO: Find a way to also ensure that nothing about the SheetModels change either, but this is less of a concern. using (Synchronizer.Lock(this.m_SlideNetworkServices.SyncRoot)) { using (Synchronizer.Lock(slide.SyncRoot)) { deck.InsertChild(new SlideInformationMessage(slide)); message.Tags = new MessageTags(); message.Tags.SlideID = slide.Id; this.m_Sender.Send(message); if (!this.m_SlideNetworkServices.ContainsKey(slide)) { SlideNetworkService service = new SlideNetworkService(this.m_Sender, this.m_Presentation, this.m_Deck, slide); this.m_SlideNetworkServices.Add(slide, service); } } } }
public SheetsCollectionHelper(SlideNetworkService service, string property, SheetMessage.SheetCollection selector) : base(service.m_Sender, service.m_Slide, property) { this.m_Service = service; this.m_Selector = selector; base.Initialize(); }
private void HandleSlideRemoved(object sender, PropertyEventArgs args_) { PropertyCollectionEventArgs args = ((PropertyCollectionEventArgs)args_); SlideModel slide = ((SlideModel)args.Removed); using (Synchronizer.Lock(this.m_SlideNetworkServices.SyncRoot)) { SlideNetworkService service = ((SlideNetworkService)this.m_SlideNetworkServices[slide]); if (service != null) { this.m_SlideNetworkServices.Remove(service); service.Dispose(); } } Message message, deck; message = new PresentationInformationMessage(this.m_Presentation); message.InsertChild(deck = new DeckInformationMessage(this.m_Deck)); deck.InsertChild(new SlideDeletedMessage(slide)); this.m_Sender.Send(message); }