using System; using System.Collections.Generic; using System.Text; namespace Wayne.Lib { /// <summary> /// Handles a collection of IConnectable items, and checks them all so they are connected. /// </summary> public class ConnectionChecker { private readonly IList<ConnectableItem> connectableItems = new List<ConnectableItem>(); private readonly object connectableItemsLock=new object(); /// <summary> /// Is all connectable items connected? /// </summary> /// <returns></returns> public bool IsConnectedToAll() { lock (connectableItemsLock) { foreach (var connectableItem in connectableItems) { if (connectableItem.Connectable.ConnectionState != DeviceConnectionState.Connected) return false; } } return true; } /// <summary> /// Adds a connectable entity to the check. /// </summary> /// <param name="connectable"></param> /// <param name="connectableDisplayName"></param> public void AddConnectableToCheck(IConnectable connectable, string connectableDisplayName) { if(connectable == null) throw new ArgumentNullException("connectable", "A instance of IConnectable is required."); connectableItems.Add(new ConnectableItem() { Connectable = connectable, DisplayName = connectableDisplayName}); } /// <summary> /// Gets a list of strings containingt those items that are not connected, and their current connection state. /// </summary> /// <returns></returns> public IList<string> GetUnconnectedAsText() { IList<string> reasons = new List<string>(); foreach (var connectableItem in connectableItems) { if (connectableItem.Connectable.ConnectionState != DeviceConnectionState.Connected) reasons.Add(connectableItem.DisplayName + ".ConnectionState = " + connectableItem.Connectable.ConnectionState); } return reasons; } class ConnectableItem { public IConnectable Connectable { get; set; } public string DisplayName { get; set; } } } }