You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

преди 2 години
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using Glorysoft.SECS.EQP.Commands;
  2. using Glorysoft.SECS.EQP.Message;
  3. using Glorysoft.SECS.EQP.Utilities;
  4. using Newtonsoft.Json;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Xml.Serialization;
  9. namespace Glorysoft.SECS.EQP
  10. {
  11. public static class ScenarioExtension
  12. {
  13. public static void ExecuteNextStep(this Scenario scenario)
  14. {
  15. if (scenario.CurrentStep > 1)
  16. {
  17. var prevWF = scenario.WorkFlows.FirstOrDefault(item => item.Step == scenario.CurrentStep);
  18. SimulatorInfo.Instance.ShowInfo = $"ScenarioName: {scenario.Name}, StepCount: {scenario.WorkFlows.Count}, CurrentStep: {scenario.CurrentStep}, Message: {prevWF.MessageName}.";
  19. }
  20. scenario.CurrentStep++;
  21. if (scenario.CurrentStep >= scenario.WorkFlows.Count)
  22. {
  23. return;
  24. }
  25. var nextWF = scenario.WorkFlows.FirstOrDefault(item => item.Step == scenario.CurrentStep);
  26. SimulatorInfo.Instance.ShowInfo = $"ScenarioName: {scenario.Name}, StepCount: {scenario.WorkFlows.Count}, CurrentStep: {scenario.CurrentStep}, Message: {nextWF.MessageName}.";
  27. switch (nextWF.MessageName)
  28. {
  29. case "S1F1": scenario.CurrentStep++; Command.S1F1Command(scenario); break;
  30. case "S1F13": scenario.CurrentStep++; Command.S1F13Command(scenario); break;
  31. case "S1F17": scenario.CurrentStep++; Command.S1F17Command(scenario); break;
  32. case "S1F15": scenario.CurrentStep++; Command.S1F15Command(scenario); break;
  33. case "S6F23": scenario.CurrentStep++; Command.S6F23Command(scenario); break;
  34. case "S5F5": scenario.CurrentStep++; Command.S5F5Command(scenario); break;
  35. case "S7F19": scenario.CurrentStep++; Command.S7F19Command(scenario); break;
  36. case "S2F13": scenario.CurrentStep++; Command.S2F13Command(scenario); break;
  37. case "S2F43": scenario.CurrentStep++; Command.S2F43Command(nextWF.MessageContent.FromJson<S2F43Item>(), scenario); break;
  38. case "S2F23": scenario.CurrentStep++; Command.S2F23Command(nextWF.MessageContent.FromJson<S2F23Item>(), scenario); break;
  39. case "S1F3": scenario.CurrentStep++; Command.S1F3Command(scenario); break;
  40. case "S2F15": scenario.CurrentStep++; Command.S2F15Command(nextWF.MessageContent.FromJson<S2F15Item>(), scenario); break;
  41. case "S2F15Rcp": scenario.CurrentStep++; Command.S2F15CommandRcp(nextWF.MessageContent.FromJson<S2F15Item>(), scenario); break;
  42. case "S2F31": scenario.CurrentStep++; Command.S2F31Command(nextWF.MessageContent.FromJson<S2F31Item>(), scenario); break;
  43. case "S2F33": scenario.CurrentStep++; Command.S2F33Command(nextWF.MessageContent.FromJson<S2F33Item>(), scenario); break;
  44. case "S2F35": scenario.CurrentStep++; Command.S2F35Command(nextWF.MessageContent.FromJson<S2F35Item>(), scenario); break;
  45. case "S2F37": scenario.CurrentStep++; Command.S2F37Command(nextWF.MessageContent.FromJson<S2F37Item>(), scenario); break;
  46. case "S2F41": scenario.CurrentStep++; Command.S2F41Command(nextWF.MessageContent.FromJson<S2F41Item>(), scenario); break;
  47. case "S5F3": scenario.CurrentStep++; Command.S5F3Command(nextWF.MessageContent.FromJson<S5F3Item>(), scenario); break;
  48. case "S7F1": scenario.CurrentStep++; Command.S7F1Command(nextWF.MessageContent.FromJson<S7F1Item>(), scenario); break;
  49. case "S7F3": scenario.CurrentStep++; Command.S7F3Command(nextWF.MessageContent.FromJson<S7F3Item>(), scenario); break;
  50. case "S7F5": scenario.CurrentStep++; Command.S7F5Command(nextWF.MessageContent.FromJson<S7F5Item>(), scenario); break;
  51. case "S7F17": scenario.CurrentStep++; Command.S7F17Command(nextWF.MessageContent.FromJson<S7F17Item>(), scenario); break;
  52. }
  53. }
  54. }
  55. [Serializable]
  56. public class ScenarioCollection
  57. {
  58. public List<Scenario> Scenarios { get; set; }
  59. public ScenarioCollection() => Scenarios = new List<Scenario>();
  60. }
  61. [Serializable]
  62. public class Scenario
  63. {
  64. [XmlAttribute]
  65. public string Name { get; set; }
  66. [JsonIgnore]
  67. [XmlIgnore]
  68. public int CurrentStep { get; set; }
  69. [XmlElement]
  70. public List<WorkFlow> WorkFlows { get; set; }
  71. public Scenario()
  72. {
  73. WorkFlows = new List<WorkFlow>();
  74. }
  75. }
  76. [Serializable]
  77. public class WorkFlow
  78. {
  79. [XmlAttribute]
  80. public int Step { get; set; }
  81. public string MessageName { get; set; }
  82. public string MessageContent { get; set; }
  83. }
  84. }