mirror of
https://gitee.com/ThingsGateway/ThingsGateway.git
synced 2025-10-28 14:13:59 +08:00
断开连接时 退出 等待数据返回
This commit is contained in:
@@ -25,7 +25,7 @@ public interface IChannel : IConnectObject, ICloseObject, ISetupConfigObject, ID
|
||||
public List<IProtocol> Collects { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 通道启动成功后
|
||||
/// CanSend
|
||||
/// </summary>
|
||||
public bool CanSend { get; }
|
||||
|
||||
@@ -34,6 +34,11 @@ public interface IChannel : IConnectObject, ICloseObject, ISetupConfigObject, ID
|
||||
/// </summary>
|
||||
public ChannelEventHandler Started { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 通道停止
|
||||
/// </summary>
|
||||
public ChannelEventHandler Stoped { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 通道启动即将成功
|
||||
/// </summary>
|
||||
|
||||
@@ -45,6 +45,9 @@ namespace ThingsGateway.Foundation
|
||||
/// <inheritdoc/>
|
||||
public ChannelEventHandler Started { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public ChannelEventHandler Stoped { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public ChannelEventHandler Starting { get; set; }
|
||||
|
||||
@@ -93,10 +96,12 @@ namespace ThingsGateway.Foundation
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override Task OnDisconnected(DisconnectEventArgs e)
|
||||
protected override async Task OnDisconnected(DisconnectEventArgs e)
|
||||
{
|
||||
Logger?.Debug($"{ToString()} {FoundationConst.Disconnected}{(e.Message.IsNullOrEmpty() ? string.Empty : $"-{e.Message}")}");
|
||||
return base.OnDisconnected(e);
|
||||
if (Stoped != null)
|
||||
await Stoped.Invoke(this);
|
||||
await base.OnDisconnected(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -29,8 +29,10 @@ namespace ThingsGateway.Foundation
|
||||
{
|
||||
Dispose(false);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public EasyLock WaitLock { get; } = new EasyLock();
|
||||
|
||||
/// <inheritdoc/>
|
||||
public List<IProtocol> Collects { get; } = new();
|
||||
|
||||
@@ -56,6 +58,9 @@ namespace ThingsGateway.Foundation
|
||||
/// <inheritdoc/>
|
||||
public ChannelEventHandler Started { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public ChannelEventHandler Stoped { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public ChannelEventHandler Starting { get; set; }
|
||||
|
||||
|
||||
@@ -21,8 +21,10 @@ namespace ThingsGateway.Foundation
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public List<IProtocol> Collects { get; } = new();
|
||||
|
||||
/// <inheritdoc/>
|
||||
public EasyLock WaitLock { get; } = new EasyLock();
|
||||
|
||||
/// <summary>
|
||||
/// 接收到数据
|
||||
/// </summary>
|
||||
@@ -34,6 +36,9 @@ namespace ThingsGateway.Foundation
|
||||
/// <inheritdoc/>
|
||||
public ChannelEventHandler Started { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public ChannelEventHandler Stoped { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public ChannelEventHandler Starting { get; set; }
|
||||
|
||||
@@ -89,10 +94,12 @@ namespace ThingsGateway.Foundation
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override Task OnDisconnected(DisconnectEventArgs e)
|
||||
protected override async Task OnDisconnected(DisconnectEventArgs e)
|
||||
{
|
||||
Logger?.Debug($"{ToString()} {FoundationConst.Disconnected}{(e.Message.IsNullOrEmpty() ? string.Empty : $"-{e.Message}")}");
|
||||
return base.OnDisconnected(e);
|
||||
if (Stoped != null)
|
||||
await Stoped.Invoke(this);
|
||||
await base.OnDisconnected(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -195,6 +195,9 @@ namespace ThingsGateway.Foundation
|
||||
/// <inheritdoc/>
|
||||
public ChannelEventHandler Started { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public ChannelEventHandler Stoped { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public ChannelEventHandler Starting { get; set; }
|
||||
|
||||
@@ -232,6 +235,14 @@ namespace ThingsGateway.Foundation
|
||||
await base.OnConnecting(socketClient, e);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
protected override async Task OnDisconnected(TgSocketClient socketClient, DisconnectEventArgs e)
|
||||
{
|
||||
if (Stoped != null)
|
||||
await Stoped.Invoke(socketClient);
|
||||
await base.OnDisconnected(socketClient, e);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public Task ConnectAsync(int timeout, CancellationToken token)
|
||||
{
|
||||
|
||||
@@ -22,8 +22,10 @@ namespace ThingsGateway.Foundation
|
||||
{
|
||||
Dispose(false);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public EasyLock WaitLock { get; } = new EasyLock();
|
||||
|
||||
/// <summary>
|
||||
/// 当收到数据时
|
||||
/// </summary>
|
||||
@@ -38,6 +40,9 @@ namespace ThingsGateway.Foundation
|
||||
/// <inheritdoc/>
|
||||
public ChannelEventHandler Started { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public ChannelEventHandler Stoped { get; set; }
|
||||
|
||||
/// <inheritdoc/>
|
||||
public ChannelEventHandler Starting { get; set; }
|
||||
|
||||
@@ -112,6 +117,8 @@ namespace ThingsGateway.Foundation
|
||||
{
|
||||
base.Stop();
|
||||
}
|
||||
if (Stoped != null)
|
||||
Stoped.Invoke(this).GetFalseAwaitResult();
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
@@ -127,6 +134,8 @@ namespace ThingsGateway.Foundation
|
||||
{
|
||||
await base.StopAsync();
|
||||
}
|
||||
if (Stoped != null)
|
||||
await Stoped.Invoke(this);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
||||
@@ -32,6 +32,7 @@ public abstract class ProtocolBase : DisposableObject, IProtocol
|
||||
Channel = channel;
|
||||
Logger = channel.Logger;
|
||||
Channel.Starting += ChannelStarting;
|
||||
Channel.Stoped += ChannelStoped;
|
||||
Channel.Started += ChannelStarted;
|
||||
Channel.Received += Received;
|
||||
Channel.Config.ConfigurePlugins(ConfigurePlugins());
|
||||
@@ -99,6 +100,19 @@ public abstract class ProtocolBase : DisposableObject, IProtocol
|
||||
return EasyTask.CompletedTask;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 通道断开连接后
|
||||
/// </summary>
|
||||
/// <param name="channel"></param>
|
||||
/// <returns></returns>
|
||||
protected Task ChannelStoped(IClientChannel channel)
|
||||
{
|
||||
//取消全部等待池
|
||||
WaitHandlePool.CancelAll();
|
||||
|
||||
return EasyTask.CompletedTask;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 通道即将连接成功时,会设置适配器
|
||||
/// </summary>
|
||||
@@ -1020,7 +1034,6 @@ public abstract class ProtocolBase : DisposableObject, IProtocol
|
||||
/// <inheritdoc/>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
WaitHandlePool.SafeDispose();
|
||||
lock (Channel)
|
||||
{
|
||||
Channel.Starting -= ChannelStarting;
|
||||
@@ -1040,6 +1053,7 @@ public abstract class ProtocolBase : DisposableObject, IProtocol
|
||||
}
|
||||
}
|
||||
}
|
||||
WaitHandlePool.SafeDispose();
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user