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;
}
}
}