Cat.Util/Cat.IdGenerator/IdGenerator.cs

(开头部分) 2KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Collections.Generic;
using System.Text;

namespace Cat.IdGenerator
{
   public class IdGenerator : IIdGenerator
   {
      private ISnowWorker _SnowWorker { get; set; }

      public Action<OverCostActionArg> GenIdActionAsync
      {
         get => _SnowWorker.GenAction;
         set => _SnowWorker.GenAction = value;
      }

      public IdGenerator(IdGeneratorOptions options)
      {
         if (options == null)
         {
            throw new ApplicationException("options error.");
         }

         if (options.StartTime > DateTime.Now)
         {
            throw new ApplicationException("StartTime error.");
         }

         if (options.SeqBitLength + options.WorkerIdBitLength > 22)
         {
            throw new ApplicationException("error:WorkerIdBitLength + SeqBitLength <= 22");
         }

         var maxWorkerIdNumber = Math.Pow(2, options.WorkerIdBitLength) - 1;
         if (options.WorkerId < 1 || options.WorkerId > maxWorkerIdNumber)
         {
            throw new ApplicationException("WorkerId is error. (range:[1, " + maxWorkerIdNumber + "]");
         }

         if (options.SeqBitLength < 2 || options.SeqBitLength > 21)
         {
            throw new ApplicationException("SeqBitLength is error. (range:[2, 21])");
         }

         var maxSeqNumber = Math.Pow(2, options.SeqBitLength) - 1;
         if (options.MaxSeqNumber < 0 || options.MaxSeqNumber > maxSeqNumber)
         {
            throw new ApplicationException("MaxSeqNumber is error. (range:[1, " + maxSeqNumber + "]");
         }

         var maxValue = maxSeqNumber - 2;
         if (options.MinSeqNumber < 5 || options.MinSeqNumber > maxValue)
         {
            throw new ApplicationException("MinSeqNumber is error. (range:[5, " + maxValue + "]");
         }

         switch (options.Method)
         {
            case 1:
               _SnowWorker = new SnowWorkerM1(options);
后面还有 22 行代码,购买后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。