断开连接时 退出 等待数据返回

This commit is contained in:
Kimdiego2098
2024-01-21 16:42:30 +08:00
parent 0f60f4754f
commit afe6a1923b
7 changed files with 62 additions and 6 deletions

View File

@@ -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>

View File

@@ -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);
}
}
}

View File

@@ -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; }

View File

@@ -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);
}
}
}

View File

@@ -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)
{

View File

@@ -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/>

View File

@@ -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);
}