| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- using System.Text;
- namespace Quadarax.Foundation.Core.Business.Processor.Task;
- public class AffinityToken : IAffinityToken
- {
- #region *** Constants ***
- // ReSharper disable once InconsistentNaming
- public const char CCH_AT_SEP = '#';
- #endregion
- #region *** Public properties ***
- public string QueueIdentifier {get; private set;}
- public int? WorkerOrdinal {get; private set;}
- #endregion
-
- #region *** Constructor ***
- public AffinityToken()
- {
- QueueIdentifier = string.Empty;
- }
- public AffinityToken(string queueIdentifier, int workerOrdinal) : this()
- {
- Set(queueIdentifier, workerOrdinal);
- }
- public AffinityToken(string affinityTokenComplex) : this()
- {
- FromComplex(affinityTokenComplex);
- }
- public AffinityToken(AffinityToken affinityToken)
- {
- if (affinityToken == null) throw new ArgumentNullException(nameof(affinityToken));
- QueueIdentifier = affinityToken.QueueIdentifier;
- WorkerOrdinal = affinityToken.WorkerOrdinal;
- }
- #endregion
-
- #region *** Public Operations ***
- public void FromComplex(string affinityTokenComplex)
- {
- if (string.IsNullOrEmpty(affinityTokenComplex)) throw new ArgumentNullException(nameof(affinityTokenComplex));;
- var parts = affinityTokenComplex.Split(CCH_AT_SEP, StringSplitOptions.RemoveEmptyEntries);
- if (parts.Length!=2) throw new ArgumentOutOfRangeException(nameof(affinityTokenComplex),$"Invalid format of affinity complex token value '{affinityTokenComplex}'.");
-
- QueueIdentifier = parts[0];
- WorkerOrdinal = int.Parse(parts[1]);
-
- }
- public void Set(string? queueIdentifier, int workerOrdinal)
- {
- if (string.IsNullOrEmpty(queueIdentifier)) throw new ArgumentNullException(nameof(queueIdentifier));
- QueueIdentifier = queueIdentifier;
- WorkerOrdinal = workerOrdinal;
- }
-
- public override string ToString()
- {
- var sb = new StringBuilder();
- if (!(string.IsNullOrEmpty(QueueIdentifier) || WorkerOrdinal == null))
- {
- sb.Append(QueueIdentifier).Append(CCH_AT_SEP).Append(WorkerOrdinal.Value);
- }
- return sb.ToString();
- }
-
- public bool Equals (AffinityToken? other)
- {
- if (other == null) return false;
- return string.Equals(ToString(), other.ToString());
- }
- #endregion
- }
|