Initial commit

This commit is contained in:
2026-07-03 16:31:37 +07:00
commit 899c7c637d
1939 changed files with 641750 additions and 0 deletions

View File

@@ -0,0 +1,124 @@
using RobotNet10.RobotApp.Client.Shared.Devices;
namespace RobotNet10.RobotApp.Devices;
/// <summary>
/// Interface cung cấp các chức năng để quản lý và truy xuất devices
/// </summary>
public interface IDeviceProvider
{
/// <summary>
/// Lấy device theo deviceId
/// </summary>
/// <param name="deviceId">Định danh duy nhất của device</param>
/// <returns>Device nếu tìm thấy, null nếu không tìm thấy</returns>
DeviceBase? GetDevice(string deviceId);
/// <summary>
/// Lấy device theo deviceId (async)
/// </summary>
/// <param name="deviceId">Định danh duy nhất của device</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>Device nếu tìm thấy, null nếu không tìm thấy</returns>
Task<DeviceBase?> GetDeviceAsync(string deviceId, CancellationToken cancellationToken = default);
/// <summary>
/// Lấy device theo deviceType (lấy device đầu tiên tìm thấy)
/// </summary>
/// <param name="deviceType">Loại thiết bị</param>
/// <returns>Device nếu tìm thấy, null nếu không tìm thấy</returns>
DeviceBase? GetDeviceByType(DeviceType deviceType);
/// <summary>
/// Lấy device theo deviceType (async)
/// </summary>
/// <param name="deviceType">Loại thiết bị</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>Device nếu tìm thấy, null nếu không tìm thấy</returns>
Task<DeviceBase?> GetDeviceByTypeAsync(DeviceType deviceType, CancellationToken cancellationToken = default);
/// <summary>
/// Lấy tất cả devices theo deviceType
/// </summary>
/// <param name="deviceType">Loại thiết bị</param>
/// <returns>Danh sách devices của loại được chỉ định</returns>
IReadOnlyList<DeviceBase> GetDevicesByType(DeviceType deviceType);
/// <summary>
/// Lấy tất cả devices theo deviceType (async)
/// </summary>
/// <param name="deviceType">Loại thiết bị</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>Danh sách devices của loại được chỉ định</returns>
Task<IReadOnlyList<DeviceBase>> GetDevicesByTypeAsync(DeviceType deviceType, CancellationToken cancellationToken = default);
/// <summary>
/// Lấy tất cả devices
/// </summary>
/// <returns>Danh sách tất cả devices</returns>
IReadOnlyList<DeviceBase> GetAllDevices();
/// <summary>
/// Lấy tất cả devices (async)
/// </summary>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>Danh sách tất cả devices</returns>
Task<IReadOnlyList<DeviceBase>> GetAllDevicesAsync(CancellationToken cancellationToken = default);
/// <summary>
/// Kiểm tra device có tồn tại không
/// </summary>
/// <param name="deviceId">Định danh của device</param>
/// <returns>True nếu device tồn tại, false nếu không</returns>
bool ContainsDevice(string deviceId);
/// <summary>
/// Lấy số lượng devices
/// </summary>
/// <returns>Số lượng devices đã đăng ký</returns>
int GetDeviceCount();
/// <summary>
/// Lấy số lượng devices theo deviceType
/// </summary>
/// <param name="deviceType">Loại thiết bị</param>
/// <returns>Số lượng devices của loại được chỉ định</returns>
int GetDeviceCountByType(DeviceType deviceType);
/// <summary>
/// Kiểm tra xem tất cả devices đã được load chưa
/// </summary>
bool AreDevicesLoaded { get; }
/// <summary>
/// Kiểm tra xem tất cả devices đã kết nối chưa
/// </summary>
bool AreDevicesConnected { get; }
/// <summary>
/// Đợi cho đến khi tất cả devices đã được load
/// </summary>
/// <param name="timeout">Timeout để đợi</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>True nếu devices đã load, false nếu timeout</returns>
Task<bool> WaitForDevicesLoadedAsync(TimeSpan timeout, CancellationToken cancellationToken = default);
/// <summary>
/// Đợi cho đến khi tất cả devices đã kết nối
/// </summary>
/// <param name="timeout">Timeout để đợi</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>True nếu devices đã connect, false nếu timeout</returns>
Task<bool> WaitForDevicesConnectedAsync(TimeSpan timeout, CancellationToken cancellationToken = default);
/// <summary>
/// Event được kích hoạt khi tất cả devices đã được load
/// </summary>
event EventHandler? DevicesLoaded;
/// <summary>
/// Event được kích hoạt khi tất cả devices đã kết nối
/// </summary>
event EventHandler? DevicesConnected;
}