using Aurora.Api; using System.Collections.Generic; namespace VisionCommon { /// /// 장비에서 시퀀스 노드를 정의하고, /// AuroraVision 시퀀스에서 사용하기 위한 클래스 /// public abstract class SeqAdapter { protected Logger _logger; private Dictionary _actionNodeMap = new Dictionary(); private Dictionary _decisionNodeMap = new Dictionary(); /// /// 생성자 /// /// 로그 태그명 public SeqAdapter(string logTag) { _logger = new Logger(logTag); } /// /// Action 노드를 가져온다. /// /// 노드 이름 /// Default Decision 노드 /// Action 노드 public DoAction GetActionNode(string nodeName, DoAction defaultNode = default(DoAction)) { return GetNode(nodeName, _actionNodeMap, defaultNode); } /// /// Decision 노드를 가져온다. /// /// 노드 이름 /// Default Decision 노드 /// Decision 노드 public DoDecision GetDecisionNode(string nodeName, DoDecision defaultNode = default(DoDecision)) { return GetNode(nodeName, _decisionNodeMap, defaultNode); } private T GetNode(string nodeName, Dictionary map, T defaultNode) { if (map.ContainsKey(nodeName)) { return map[nodeName]; } _logger.FuncE($"Node does NOT exist : {nodeName}"); return defaultNode; } /// /// Action 노드를 등록한다. /// /// 노드 이름 /// Action 노드 protected void SetActionNode(string nodeName, DoAction node) { SetNode(nodeName, node, _actionNodeMap); } /// /// Deicision 노드를 등록한다. /// /// 노드 이름 /// Deicision 노드 protected void SetDeicisionNode(string nodeName, DoDecision node) { SetNode(nodeName, node, _decisionNodeMap); } private void SetNode(string nodeName, T node, Dictionary map) { if (!map.ContainsKey(nodeName)) { map[nodeName] = node; } else { _logger.I($"Node already exist : {nodeName}"); } } } /// /// Sequence adapter 사용 시 default node ( ActionNode ) 만들어주는 Method /// public class DefaultActionNode{ SequenceActionResult _DefaultActionNodeReturn = SequenceAction.Ok(); /// /// 생성자 /// /// ActionNode 사용 시 Default로 제공하는 결과값 (default(non param) : SequenceAction.OK()) public DefaultActionNode(SequenceActionResult defaultActionNodeReturn) { _DefaultActionNodeReturn = defaultActionNodeReturn; } /// /// 생성자 : ActionNode 사용 시 Default로 제공하는 결과값 (default : SequenceAction.OK()) /// public DefaultActionNode() { } /// /// Default Action Node /// /// Default Action Node return public SequenceActionResult ActionNode( SequenceContext context, string id, SequenceActionResult param) { return _DefaultActionNodeReturn; } } /// /// Sequence adapter 사용 시 default node (Decision Node ) 만들어주는 Method /// public class DefaultDecisionNode { private string _DefaultDecisionNodeReturn = ""; /// /// 생성자 /// /// DecisionNode 사용 시 Default로 제공하는 결과값(default : "") public DefaultDecisionNode(string defaultDecisionNodeReturn) { _DefaultDecisionNodeReturn = defaultDecisionNodeReturn; } /// /// Default Decision Node /// /// Default Decision Node return public string DecisionNode( SequenceContext context, string id, ICollection branches, SequenceActionResult param) { return _DefaultDecisionNodeReturn; } } }