using DMS.Infrastructure.Models;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace DMS.Infrastructure.Interfaces.Services
{
///
/// OPC UA服务接口,定义了与OPC UA服务器进行通信所需的方法
///
public interface IOpcUaService
{
///
/// 获取当前连接状态
///
bool IsConnected { get; }
///
/// 异步连接到OPC UA服务器
///
/// 表示异步操作的任务
Task ConnectAsync(string serverUrl);
///
/// 异步断开与OPC UA服务器的连接
///
/// 表示异步操作的任务
Task DisconnectAsync();
///
/// 浏览指定节点的子节点
///
/// 要浏览的节点,如果为null则浏览根节点
/// 表示异步操作的任务,包含子节点列表
Task> BrowseNode(OpcUaNode? nodeToBrowse);
///
/// 订阅单个节点的数据变化
///
/// 要订阅的节点ID
/// 数据变化时的回调方法
/// 发布间隔(毫秒)
/// 采样间隔(毫秒)
void SubscribeToNode(string nodeId, Action onDataChange, int publishingInterval = 1000, int samplingInterval = 500);
///
/// 订阅多个节点的数据变化
///
/// 要订阅的节点ID列表
/// 数据变化时的回调方法
/// 发布间隔(毫秒)
/// 采样间隔(毫秒)
void SubscribeToNode(List nodeIds, Action onDataChange, int publishingInterval = 1000, int samplingInterval = 500);
///
/// 取消订阅单个节点
///
/// 要取消订阅的节点的ID
void UnsubscribeFromNode(string nodeId);
///
/// 取消订阅多个节点
///
/// 要取消订阅的节点ID列表
void UnsubscribeFromNode(List nodeIds);
///
/// 获取当前已订阅的所有节点
///
/// 已订阅节点的列表
List GetSubscribedNodes();
///
/// 异步读取单个节点的值
///
/// 要读取的节点
/// 表示异步操作的任务
Task ReadNodeValueAsync(OpcUaNode node);
///
/// 异步读取多个节点的值
///
/// 要读取的节点列表
/// 表示异步操作的任务
Task ReadNodeValuesAsync(List nodes);
///
/// 异步写入单个节点的值
///
/// 要写入的节点
/// 要写入的值
/// 表示异步操作的任务,如果写入成功返回true,否则返回false
Task WriteNodeValueAsync(OpcUaNode node, object value);
///
/// 异步写入多个节点的值
///
/// 要写入的节点及其对应值的字典
/// 表示异步操作的任务,如果所有写入都成功返回true,否则返回false
Task WriteNodeValuesAsync(Dictionary nodesToWrite);
}
}