WritePortProducer.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435
  1. namespace SHJX.Service.Control.PortProduction.PortProducerImpl
  2. {
  3. public class WritePortProducer : IPortProducer
  4. {
  5. private static readonly ConcurrentDictionary<ArgType, IPortArg> PortArgs = new();
  6. public WritePortProducer(OptCommand command) : base(command) { }
  7. protected override IPortArg GetPortArg(ArgType type)
  8. {
  9. if (PortArgs.TryGetValue(type, out IPortArg port))
  10. {
  11. return port;
  12. }
  13. IPortArg portArg = type switch
  14. {
  15. ArgType.Move => new MovePortArg(),
  16. ArgType.Stop => new StopPortArg(),
  17. ArgType.GoBack => new GoBackPortArg(),
  18. ArgType.Speed => new SpeedPortArg(),
  19. ArgType.AcSpeed => new AcSpeedPortArg(),
  20. ArgType.DeSpeed => new DeSpeedPortArg(),
  21. ArgType.Open => new OpenPortArg(),
  22. ArgType.Close => new ClosePortArg(),
  23. ArgType.Temp => new TemperaturePortArg(),
  24. ArgType.Pid => new PidPortArg(),
  25. ArgType.Ratio => new RatioPortArg(),
  26. ArgType.Integral => new IntegralPortArg(),
  27. ArgType.Differential => new DifferentialPortArg(),
  28. ArgType.IntegralDeafult => new IntegralDeafultPortArg(),
  29. _ => throw new ArgumentException("未找到对应的枚举!")
  30. };
  31. PortArgs.TryAdd(type, portArg);
  32. return portArg;
  33. }
  34. }
  35. }