RobotNet/RobotNet.Script/IRobot.cs
2025-10-15 15:15:53 +07:00

233 lines
8.0 KiB
C#

using RobotNet.Script.Expressions;
using System.Linq.Expressions;
namespace RobotNet.Script;
/// <summary>
/// Service điểu khiển robot trong hệ thống RobotNet.
/// </summary>
public interface IRobot
{
/// <summary>
/// Di chuyển robot đến một nút trong bản đồ với action kết thúc.
/// </summary>
/// <param name="nodeName"></param>
/// <param name="actions"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<RobotResult> Move(string nodeName, IDictionary<string, IEnumerable<RobotAction>> actions, CancellationToken cancellationToken);
/// <summary>
/// Di chuyển robot đến một nút trong bản đồ với action kết thúc.
/// </summary>
/// <param name="nodeName"></param>
/// <param name="actions"></param>
/// <param name="lastAngle"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<RobotResult> Move(string nodeName, IDictionary<string, IEnumerable<RobotAction>> actions, double lastAngle, CancellationToken cancellationToken);
/// <summary>
/// Di chuyển robot đến một nút trong bản đồ với action kết thúc.
/// </summary>
/// <param name="nodeName"></param>
/// <param name="lastActions"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<RobotResult> Move(string nodeName, IEnumerable<RobotAction> lastActions, CancellationToken cancellationToken);
/// <summary>
/// Di chuyển robot đến một nút trong bản đồ với action kết thúc.
/// </summary>
/// <param name="nodeName"></param>
/// <param name="lastActions"></param>
/// <param name="lastAngle"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<RobotResult> Move(string nodeName, IEnumerable<RobotAction> lastActions, double lastAngle, CancellationToken cancellationToken);
/// <summary>
/// Di chuyển robot đến một nút trong bản đồ mà không cần action kết thúc.
/// </summary>
/// <param name="nodeName"></param>
/// <param name="lastAngle"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<RobotResult> Move(string nodeName, double lastAngle, CancellationToken cancellationToken);
/// <summary>
/// Di chuyển robot đến một nút trong bản đồ mà không cần action kết thúc.
/// </summary>
/// <param name="nodeName"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<RobotResult> Move(string nodeName, CancellationToken cancellationToken);
/// <summary>
/// Hủy bỏ hành động di chuyển hiện tại của robot, nếu có.
/// </summary>
/// <returns></returns>
Task AbortMovement();
/// <summary>
/// Thực hiện một hành động ngay lập tức trên robot mà không cần chờ đợi.
/// </summary>
/// <param name="action"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<RobotResult> Execute(RobotAction action, CancellationToken cancellationToken);
/// <summary>
/// Lấy trạng thái của robot
/// </summary>
/// <returns></returns>
Task<RobotState> GetState();
/// <summary>
/// Waits for the system to reach a ready state.
/// </summary>
/// <param name="cancellationToken">A token to monitor for cancellation requests. If the token is canceled, the operation will be aborted.</param>
/// <returns>A task that represents the asynchronous operation. The task result is <see langword="true"/> if the system
/// reaches a ready state; otherwise, <see langword="false"/> if the operation is canceled or the system fails to
/// become ready.</returns>
Task<bool> WaitForReady(CancellationToken cancellationToken);
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
Task<bool> RequestACSIn(string id);
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
Task<bool> RequestACSOut(string id);
/// <summary>
/// Trả về danh sách các tải trọng hiện tại của robot, bao gồm ID, loại, vị trí và trọng lượng.
/// </summary>
/// <returns></returns>
Task<RobotLoad[]> GetLoads();
/// <summary>
///
/// </summary>
/// <returns></returns>
Task<bool> CancelOrder();
/// <summary>
///
/// </summary>
/// <returns></returns>
Task<bool> CancelAction();
/// <summary>
/// Chức năng di chuyển robot giả lập theo tọa độ (x, y) trong không gian 2D.
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<RobotResult> SimMoveStraight(double x, double y, CancellationToken cancellationToken);
/// <summary>
/// Chức năng xoay robot giả lập theo một góc nhất định (đơn vị: độ).
/// </summary>
/// <param name="angle"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<RobotResult> SimRotate(double angle, CancellationToken cancellationToken);
}
/// <summary>
/// Service quản lý các robot trong hệ thống RobotNet.
/// </summary>
public interface IRobotManager
{
/// <summary>
/// Trả về đối tượng điểu khiển robot theo ID.
/// </summary>
/// <param name="robotId"></param>
/// <returns></returns>
Task<IRobot?> GetRobotById(string robotId);
/// <summary>
/// Lấy trạng thái của một robot theo ID.
/// </summary>
/// <param name="robotId"></param>
/// <returns></returns>
Task<RobotState> GetRobotState(string robotId);
/// <summary>
/// Tìm kiếm các robot trong bản đồ theo tên và mô hình.
/// </summary>
/// <param name="map"></param>
/// <param name="model"></param>
/// <returns></returns>
Task<IEnumerable<string>> SearchRobots(string map, string model);
/// <summary>
/// Tìm kiếm các robot trong bản đồ theo tên và mô hình.
/// </summary>
/// <param name="map"></param>
/// <param name="model"></param>
/// <param name="expr"></param>
/// <returns></returns>
Task<IEnumerable<string>> SearchRobots(string map, string model, Expression<Func<Expressions.RobotState, bool>> expr);
}
/// <summary>
/// Regulates if the action is allowed to be executed during movement and/or parallel to other actions.
/// </summary>
public enum BlockingType
{
/// <summary>
/// Action can happen in parallel with others, including movement.
/// </summary>
NONE,
/// <summary>
/// Action can happen simultaneously with others, but not while moving.
/// </summary>
SOFT,
/// <summary>
/// No other actions can be performed while this action is running.
/// </summary>
HARD
}
/// <summary>
/// Mô tả một hành động của robot.
/// </summary>
/// <param name="ActionType"></param>
/// <param name="BlockingType"></param>
public record RobotAction(string ActionType, BlockingType BlockingType)
{
/// <summary>
/// Danh sách các tham số của hành động robot.
/// </summary>
public IDictionary<string, string>? Parameters { get; set; }
}
/// <summary>
/// Dữ liệu trả về từ các hành động của robot, bao gồm thông tin về thành công hay thất bại và thông điệp mô tả.
/// </summary>
/// <param name="IsSuccess"></param>
/// <param name="Message"></param>
public record RobotResult(bool IsSuccess, string Message);
/// <summary>
/// Thông tin về tải trọng của robot, bao gồm ID, loại, vị trí và trọng lượng.
/// </summary>
/// <param name="Id"></param>
/// <param name="Type"></param>
/// <param name="Position"></param>
/// <param name="Weight"></param>
public record RobotLoad(string Id, string Type, string Position, double Weight);