| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- //-----------------------------------------------------------------------------
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //-----------------------------------------------------------------------------
- namespace System.ServiceModel.Dispatcher
- {
- using System;
- using System.Collections.Generic;
- using System.ServiceModel.Channels;
- class SynchronizedChannelCollection<TChannel> : SynchronizedCollection<TChannel>
- where TChannel : IChannel
- {
- EventHandler onChannelClosed;
- EventHandler onChannelFaulted;
- internal SynchronizedChannelCollection(object syncRoot)
- : base(syncRoot)
- {
- this.onChannelClosed = new EventHandler(OnChannelClosed);
- this.onChannelFaulted = new EventHandler(OnChannelFaulted);
- }
- void AddingChannel(TChannel channel)
- {
- channel.Faulted += this.onChannelFaulted;
- channel.Closed += this.onChannelClosed;
- }
- void RemovingChannel(TChannel channel)
- {
- channel.Faulted -= this.onChannelFaulted;
- channel.Closed -= this.onChannelClosed;
- }
- void OnChannelClosed(object sender, EventArgs args)
- {
- TChannel channel = (TChannel)sender;
- this.Remove(channel);
- }
- void OnChannelFaulted(object sender, EventArgs args)
- {
- TChannel channel = (TChannel)sender;
- this.Remove(channel);
- }
- protected override void ClearItems()
- {
- List<TChannel> items = this.Items;
- for (int i = 0; i < items.Count; i++)
- {
- this.RemovingChannel(items[i]);
- }
- base.ClearItems();
- }
- protected override void InsertItem(int index, TChannel item)
- {
- this.AddingChannel(item);
- base.InsertItem(index, item);
- }
- protected override void RemoveItem(int index)
- {
- TChannel oldItem = this.Items[index];
- base.RemoveItem(index);
- this.RemovingChannel(oldItem);
- }
- protected override void SetItem(int index, TChannel item)
- {
- TChannel oldItem = this.Items[index];
- this.AddingChannel(item);
- base.SetItem(index, item);
- this.RemovingChannel(oldItem);
- }
- }
- }
|