123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- using System;
- namespace Wayne.Lib.AsyncManager
- {
- /// <summary>
- /// Async manager using Int as operation id.
- /// </summary>
- public class IntAsyncManager : AsyncManager<int>
- {
- private int currentValue;
- private readonly int maxValue;
- private readonly int wrapTo;
- /// <summary>
- /// Constructor.
- /// Uses a default timeout of 1 hour.
- /// </summary>
- /// <param name="id">The Id.</param>
- /// <param name="parentEntity">The parent entity.</param>
- public IntAsyncManager(int id, IIdentifiableEntity parentEntity)
- : this(id, parentEntity, ServiceContainerFactory.Create(), 0, int.MaxValue, 0)
- {
- }
- /// <summary>
- /// Constructor.
- /// Uses a default timeout of 1 hour.
- /// </summary>
- /// <param name="id">The Id.</param>
- /// <param name="parentEntity">The parent entity.</param>
- /// <param name="serviceLocator"></param>
- /// <param name="initialValue">The initial value.</param>
- /// <param name="maxValue">The maximum (included) value.</param>
- public IntAsyncManager(int id, IIdentifiableEntity parentEntity, IServiceLocator serviceLocator, int initialValue, int maxValue)
- : this(id, parentEntity, serviceLocator, initialValue, maxValue, initialValue)
- {
- }
- /// <summary>
- /// Constructor.
- /// Uses a default timeout of 1 hour.
- /// </summary>
- /// <param name="id">The Id.</param>
- /// <param name="parentEntity">The parent entity.</param>
- /// <param name="serviceLocator"></param>
- /// <param name="initialValue">The initial value.</param>
- /// <param name="maxValue">The maximum (included) value.</param>
- /// <param name="wrapTo">This is the next value after reaching the maximum value.</param>
- public IntAsyncManager(int id, IIdentifiableEntity parentEntity, IServiceLocator serviceLocator, int initialValue, int maxValue, int wrapTo)
- : this(id, parentEntity, serviceLocator, initialValue, maxValue, wrapTo, TimeSpan.FromHours(1))
- {
- }
- /// <summary>
- /// Constructor.
- /// </summary>
- /// <param name="id">The Id.</param>
- /// <param name="parentEntity">The parent entity.</param>
- /// <param name="serviceLocator"></param>
- /// <param name="initialValue">The initial value.</param>
- /// <param name="maxValue">The maximum (included) value.</param>
- /// <param name="wrapTo">This is the next value after reaching the maximum value.</param>
- /// <param name="cleanOutstandingOperationsOlderThan">Sets the maximum age an operation can achieve.
- /// Minimum value is 1 minute. If null no timer is created.
- /// </param>
- public IntAsyncManager(int id, IIdentifiableEntity parentEntity, IServiceLocator serviceLocator, int initialValue, int maxValue, int wrapTo, TimeSpan? cleanOutstandingOperationsOlderThan)
- : base(id, parentEntity, serviceLocator, cleanOutstandingOperationsOlderThan)
- {
- if (initialValue > maxValue)
- throw new ArgumentException("The initialValue may not be greater than the maxValue!");
- if (wrapTo > maxValue)
- throw new ArgumentException("The wrapTo may not be greater than the maxValue!");
- currentValue = initialValue;
- this.maxValue = maxValue;
- this.wrapTo = wrapTo;
- }
- /// <summary>
- /// Generates the next id.
- /// </summary>
- /// <returns></returns>
- protected override int CreateNextOperationId()
- {
- int value = currentValue;
- long nextLong = (long)currentValue + 1;
- if (nextLong > maxValue)
- nextLong = wrapTo;
- currentValue = (int)nextLong;
- return value;
- }
- /// <summary>
- /// Entity subtype
- /// </summary>
- public override string EntitySubType
- {
- get { return "int"; }
- }
- }
- }
|