|
|
@@ -783,7 +783,7 @@ namespace YSAI.Core.relay
|
|
|
{
|
|
|
if (InstanceIoc.ContainsKey(ISn))
|
|
|
{
|
|
|
- OperateResult operateResult = Remove(ISn);
|
|
|
+ OperateResult operateResult = Remove(new List<string> { ISn });
|
|
|
return Break(SN, operateResult.State, operateResult.Message);
|
|
|
}
|
|
|
else
|
|
|
@@ -826,33 +826,62 @@ namespace YSAI.Core.relay
|
|
|
/// <summary>
|
|
|
/// 移除指定实例
|
|
|
/// </summary>
|
|
|
- /// <param name="ISn">实例唯一标识符</param>
|
|
|
+ /// <param name="ISns">实例唯一标识符为空则执行所有</param>
|
|
|
/// <returns>统一出参</returns>
|
|
|
- public OperateResult Remove(string ISn)
|
|
|
+ public OperateResult Remove(List<string>? ISns = null)
|
|
|
{
|
|
|
string SN = Depart("Remove");
|
|
|
try
|
|
|
{
|
|
|
- if (InstanceIoc.ContainsKey(ISn))
|
|
|
+ try
|
|
|
{
|
|
|
- IRelay? relay;
|
|
|
- if (InstanceIoc.Remove(ISn, out relay))
|
|
|
+ List<string> FailMessage = new List<string>();
|
|
|
+ if (ISns != null)
|
|
|
{
|
|
|
- if (relay != null)
|
|
|
+ foreach (var sn in ISns)
|
|
|
{
|
|
|
- //直接释放
|
|
|
- relay.Dispose();
|
|
|
+ if (InstanceIoc.ContainsKey(sn))
|
|
|
+ {
|
|
|
+ IRelay? relay;
|
|
|
+ if (InstanceIoc.Remove(sn, out relay))
|
|
|
+ {
|
|
|
+ if (relay != null)
|
|
|
+ {
|
|
|
+ //直接释放
|
|
|
+ relay.Dispose();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ FailMessage.Add($"{sn} 的实例移除失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ FailMessage.Add($"未找到 {sn} 的实例");
|
|
|
+ }
|
|
|
}
|
|
|
- return Break(SN, true);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- return Break(SN, false, $"{ISn} 的实例移除失败");
|
|
|
+ foreach (var item in InstanceIoc)
|
|
|
+ {
|
|
|
+ item.Value.Dispose();
|
|
|
+ }
|
|
|
+ InstanceIoc.Clear();
|
|
|
+ }
|
|
|
+ if (FailMessage.Count > 0)
|
|
|
+ {
|
|
|
+ return Break(SN, false, $"存在 {FailMessage.Count} 失败信息", FailMessage, ResultType.Json);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return Break(SN, true);
|
|
|
}
|
|
|
}
|
|
|
- else
|
|
|
+ catch (Exception ex)
|
|
|
{
|
|
|
- return Break(SN, false, $"未找到 {ISn} 的实例");
|
|
|
+ return Break(SN, false, ex.Message, Exception: ex);
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
@@ -864,20 +893,50 @@ namespace YSAI.Core.relay
|
|
|
/// <summary>
|
|
|
/// 打开
|
|
|
/// </summary>
|
|
|
- /// <param name="ISn">实例唯一标识符</param>
|
|
|
+ /// <param name="ISns">实例唯一标识符为空则执行所有</param>
|
|
|
/// <returns>统一出参</returns>
|
|
|
- public OperateResult On(string ISn)
|
|
|
+ public OperateResult On(List<string>? ISns = null)
|
|
|
{
|
|
|
string SN = Depart("On");
|
|
|
try
|
|
|
{
|
|
|
- if (InstanceIoc.ContainsKey(ISn))
|
|
|
+ List<string> FailMessage = new List<string>();
|
|
|
+ if (ISns != null)
|
|
|
+ {
|
|
|
+ foreach (var sn in ISns)
|
|
|
+ {
|
|
|
+ if (InstanceIoc.ContainsKey(sn))
|
|
|
+ {
|
|
|
+ OperateResult operateResult = InstanceIoc[sn].On();
|
|
|
+ if (!operateResult.State)
|
|
|
+ {
|
|
|
+ FailMessage.Add(operateResult.Message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ FailMessage.Add($"未找到 {sn} 的实例");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
- return InstanceIoc[ISn].On();
|
|
|
+ foreach (var item in InstanceIoc)
|
|
|
+ {
|
|
|
+ OperateResult operateResult = item.Value.On();
|
|
|
+ if (!operateResult.State)
|
|
|
+ {
|
|
|
+ FailMessage.Add(operateResult.Message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (FailMessage.Count > 0)
|
|
|
+ {
|
|
|
+ return Break(SN, false, $"存在 {FailMessage.Count} 失败信息", FailMessage, ResultType.Json);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- return Break(SN, false, $"未找到 {ISn} 的实例");
|
|
|
+ return Break(SN, true);
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
@@ -889,21 +948,53 @@ namespace YSAI.Core.relay
|
|
|
/// <summary>
|
|
|
/// 关闭
|
|
|
/// </summary>
|
|
|
- /// <param name="ISn">实例唯一标识符</param>
|
|
|
+ /// <param name="ISns">实例唯一标识符为空则执行所有</param>
|
|
|
/// <returns>统一出参</returns>
|
|
|
- public OperateResult Off(string ISn)
|
|
|
+ public OperateResult Off(List<string>? ISns = null)
|
|
|
{
|
|
|
string SN = Depart("Off");
|
|
|
try
|
|
|
{
|
|
|
- if (InstanceIoc.ContainsKey(ISn))
|
|
|
+ List<string> FailMessage = new List<string>();
|
|
|
+ if (ISns != null)
|
|
|
{
|
|
|
- return InstanceIoc[ISn].Off();
|
|
|
+ foreach (var sn in ISns)
|
|
|
+ {
|
|
|
+ if (InstanceIoc.ContainsKey(sn))
|
|
|
+ {
|
|
|
+ OperateResult operateResult = InstanceIoc[sn].Off();
|
|
|
+ if (!operateResult.State)
|
|
|
+ {
|
|
|
+ FailMessage.Add(operateResult.Message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ FailMessage.Add($"未找到 {sn} 的实例");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- return Break(SN, false, $"未找到 {ISn} 的实例");
|
|
|
+ foreach (var item in InstanceIoc)
|
|
|
+ {
|
|
|
+ OperateResult operateResult = item.Value.Off();
|
|
|
+ if (!operateResult.State)
|
|
|
+ {
|
|
|
+ FailMessage.Add(operateResult.Message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (FailMessage.Count > 0)
|
|
|
+ {
|
|
|
+ return Break(SN, false, $"存在 {FailMessage.Count} 失败信息", FailMessage, ResultType.Json);
|
|
|
}
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return Break(SN, true);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
@@ -979,20 +1070,50 @@ namespace YSAI.Core.relay
|
|
|
/// 添加订阅
|
|
|
/// </summary>
|
|
|
/// <param name="Topic">主题</param>
|
|
|
- /// <param name="ISn">实例唯一标识符</param>
|
|
|
+ /// <param name="ISns">实例唯一标识符为空则执行所有</param>
|
|
|
/// <returns>统一结果</returns>
|
|
|
- public OperateResult Subscribe(string Topic, string ISn)
|
|
|
+ public OperateResult Subscribe(string Topic, List<string>? ISns = null)
|
|
|
{
|
|
|
string SN = Depart("Subscribe");
|
|
|
try
|
|
|
{
|
|
|
- if (InstanceIoc.ContainsKey(ISn))
|
|
|
+ List<string> FailMessage = new List<string>();
|
|
|
+ if (ISns != null)
|
|
|
{
|
|
|
- return InstanceIoc[ISn].Subscribe(Topic);
|
|
|
+ foreach (var sn in ISns)
|
|
|
+ {
|
|
|
+ if (InstanceIoc.ContainsKey(sn))
|
|
|
+ {
|
|
|
+ OperateResult operateResult = InstanceIoc[sn].Subscribe(Topic);
|
|
|
+ if (!operateResult.State)
|
|
|
+ {
|
|
|
+ FailMessage.Add(operateResult.Message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ FailMessage.Add($"未找到 {sn} 的实例");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- return Break(SN, false, $"未找到 {ISn} 的实例");
|
|
|
+ foreach (var item in InstanceIoc)
|
|
|
+ {
|
|
|
+ OperateResult operateResult = item.Value.Subscribe(Topic);
|
|
|
+ if (!operateResult.State)
|
|
|
+ {
|
|
|
+ FailMessage.Add(operateResult.Message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (FailMessage.Count > 0)
|
|
|
+ {
|
|
|
+ return Break(SN, false, $"存在 {FailMessage.Count} 失败信息", FailMessage, ResultType.Json);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return Break(SN, true);
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
@@ -1005,20 +1126,50 @@ namespace YSAI.Core.relay
|
|
|
/// 移除订阅
|
|
|
/// </summary>
|
|
|
/// <param name="Topic">主题</param>
|
|
|
- /// <param name="ISn">实例唯一标识符</param>
|
|
|
+ /// <param name="ISns">实例唯一标识符为空则执行所有</param>
|
|
|
/// <returns>统一结果</returns>
|
|
|
- public OperateResult UnSubscribe(string Topic, string ISn)
|
|
|
+ public OperateResult UnSubscribe(string Topic, List<string>? ISns = null)
|
|
|
{
|
|
|
string SN = Depart("UnSubscribe");
|
|
|
try
|
|
|
{
|
|
|
- if (InstanceIoc.ContainsKey(ISn))
|
|
|
+ List<string> FailMessage = new List<string>();
|
|
|
+ if (ISns != null)
|
|
|
+ {
|
|
|
+ foreach (var sn in ISns)
|
|
|
+ {
|
|
|
+ if (InstanceIoc.ContainsKey(sn))
|
|
|
+ {
|
|
|
+ OperateResult operateResult = InstanceIoc[sn].UnSubscribe(Topic);
|
|
|
+ if (!operateResult.State)
|
|
|
+ {
|
|
|
+ FailMessage.Add(operateResult.Message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ FailMessage.Add($"未找到 {sn} 的实例");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
- return InstanceIoc[ISn].UnSubscribe(Topic);
|
|
|
+ foreach (var item in InstanceIoc)
|
|
|
+ {
|
|
|
+ OperateResult operateResult = item.Value.UnSubscribe(Topic);
|
|
|
+ if (!operateResult.State)
|
|
|
+ {
|
|
|
+ FailMessage.Add(operateResult.Message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (FailMessage.Count > 0)
|
|
|
+ {
|
|
|
+ return Break(SN, false, $"存在 {FailMessage.Count} 失败信息", FailMessage, ResultType.Json);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- return Break(SN, false, $"未找到 {ISn} 的实例");
|
|
|
+ return Break(SN, true);
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|