BotSharp/src/Infrastructure/BotSharp.Abstraction/Routing/Models/RoutingContext.cs

58 lines
1.2 KiB
C#
Raw Normal View History

using BotSharp.Abstraction.Routing.Settings;
namespace BotSharp.Abstraction.Routing.Models;
public class RoutingContext
{
private readonly RoutingSettings _setting;
public RoutingContext(RoutingSettings setting)
{
_setting = setting;
}
private Stack<string> _stack { get; set; }
= new Stack<string>();
/// <summary>
/// Intent name
/// </summary>
public string IntentName { get; set; }
2023-10-27 01:23:06 +00:00
/// <summary>
/// Agent that can handl user original goal.
/// </summary>
public string OriginAgentId
2023-10-27 01:23:06 +00:00
=> _stack.Where(x => x != _setting.RouterId).Last();
public string GetCurrentAgentId()
{
if (_stack.Count == 0)
{
_stack.Push(_setting.RouterId);
}
return _stack.Peek();
}
public void Push(string agentId)
{
if (_stack.Count == 0 || _stack.Peek() != agentId)
{
_stack.Push(agentId);
}
}
/// <summary>
/// Pop current agent
/// </summary>
/// <returns>Return next agent</returns>
public string Pop()
{
if (_stack.Count > 1)
{
_stack.Pop();
}
return _stack.Peek();
}
}