using System; using System.Collections.Generic; using System.Linq; namespace TINK.Services.BluetoothLock { public class TimeOutProvider : ITimeOutProvider { /// Maximum factor applied on timeout factor. private readonly int MAXIMUMFACTORTIMEOUT = 4; /// Default timeout to connect to bluetooth lock. public static int DEFAULT_BLUETOOTHCONNECT_TIMEOUTSECONDS = 5; public TimeOutProvider(IEnumerable timeOuts = null) { TimeOuts = timeOuts != null && timeOuts.Count() > 0 ? timeOuts.ToList() : new List { new TimeSpan(0, 0, DEFAULT_BLUETOOTHCONNECT_TIMEOUTSECONDS) }; } private List TimeOuts { get; } public TimeSpan MultiConnect => TimeOuts.ToArray()[0]; public TimeSpan GetSingleConnect(int countOfTry) => countOfTry < TimeOuts.Count ? TimeOuts.ToArray()[countOfTry] : new TimeSpan(TimeOuts.ToArray()[0].Ticks * Math.Min(countOfTry, MAXIMUMFACTORTIMEOUT)) ; } }