#region copyright //------------------------------------------------------------------------------ // 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 // 此代码版权(除特别声明外的代码)归作者本人Diego所有 // 源代码使用协议遵循本仓库的开源协议及附加协议 // Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway // Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway // 使用文档:https://diego2098.gitee.io/thingsgateway-docs/ // QQ群:605534569 //------------------------------------------------------------------------------ #endregion namespace ThingsGateway.Foundation.Dmtp { /// /// 适用于的扩展。 /// public static class DmtpActorExtension { #region Ping /// public static bool Ping(this IDmtpActorObject client, int timeout = 5000) { return client.DmtpActor.Ping(timeout); } /// public static bool Ping(this IDmtpActorObject client, string targetId, int timeout = 5000) { return client.DmtpActor.Ping(targetId, timeout); } /// public static Task PingAsync(this IDmtpActorObject client, int timeout = 5000) { return client.DmtpActor.PingAsync(timeout); } /// public static Task PingAsync(this IDmtpActorObject client, string targetId, int timeout = 5000) { return client.DmtpActor.PingAsync(targetId, timeout); } #endregion Ping #region IDmtpChannel /// public static bool ChannelExisted(this IDmtpActorObject client, int id) { return client.DmtpActor.ChannelExisted(id); } /// public static IDmtpChannel CreateChannel(this IDmtpActorObject client, Metadata metadata = default) { return client.DmtpActor.CreateChannel(metadata); } /// public static IDmtpChannel CreateChannel(this IDmtpActorObject client, int id, Metadata metadata = default) { return client.DmtpActor.CreateChannel(id, metadata); } /// public static IDmtpChannel CreateChannel(this IDmtpActorObject client, string targetId, int id, Metadata metadata = default) { return client.DmtpActor.CreateChannel(targetId, id, metadata); } /// public static IDmtpChannel CreateChannel(this IDmtpActorObject client, string targetId, Metadata metadata = default) { return client.DmtpActor.CreateChannel(targetId, metadata); } /// public static Task CreateChannelAsync(this IDmtpActorObject client, Metadata metadata = default) { return client.DmtpActor.CreateChannelAsync(metadata); } /// public static Task CreateChannelAsync(this IDmtpActorObject client, int id, Metadata metadata = default) { return client.DmtpActor.CreateChannelAsync(id, metadata); } /// public static Task CreateChannelAsync(this IDmtpActorObject client, string targetId, int id, Metadata metadata = default) { return client.DmtpActor.CreateChannelAsync(targetId, id, metadata); } /// public static Task CreateChannelAsync(this IDmtpActorObject client, string targetId, Metadata metadata = default) { return client.DmtpActor.CreateChannelAsync(targetId, metadata); } /// public static bool TrySubscribeChannel(this IDmtpActorObject client, int id, out IDmtpChannel channel) { return client.DmtpActor.TrySubscribeChannel(id, out channel); } #endregion IDmtpChannel #region 尝试发送 /// /// 尝试发送 /// /// /// /// /// /// /// public static bool TrySend(this IDmtpActorObject client, ushort protocol, byte[] buffer, int offset, int length) { try { client.DmtpActor.Send(protocol, buffer, offset, length); return true; } catch { return false; } } /// /// 尝试发送 /// /// /// /// /// public static bool TrySend(this IDmtpActorObject client, ushort protocol, byte[] buffer) { try { client.DmtpActor.Send(protocol, buffer, 0, buffer.Length); return true; } catch { return false; } } /// /// 尝试发送 /// /// /// /// public static bool TrySend(this IDmtpActorObject client, ushort protocol) { try { client.DmtpActor.Send(protocol, TouchSocketCoreUtility.ZeroBytes, 0, 0); return true; } catch { return false; } } /// /// 尝试发送 /// /// /// /// /// public static bool TrySend(this IDmtpActorObject client, ushort protocol, ByteBlock byteBlock) { try { client.DmtpActor.Send(protocol, byteBlock); return true; } catch { return false; } } #endregion 尝试发送 #region 尝试异步发送 /// /// 尝试发送 /// /// /// /// /// /// /// public static async Task TrySendAsync(this IDmtpActorObject client, ushort protocol, byte[] buffer, int offset, int length) { try { await client.DmtpActor.SendAsync(protocol, buffer, offset, length); return true; } catch { return false; } } /// /// 尝试发送 /// /// /// /// /// public static async Task TrySendAsync(this IDmtpActorObject client, ushort protocol, byte[] buffer) { try { await client.DmtpActor.SendAsync(protocol, buffer, 0, buffer.Length); return true; } catch { return false; } } /// /// 尝试发送 /// /// /// /// public static async Task TrySendAsync(this IDmtpActorObject client, ushort protocol) { try { await client.DmtpActor.SendAsync(protocol, TouchSocketCoreUtility.ZeroBytes, 0, 0); return true; } catch { return false; } } #endregion 尝试异步发送 #region 发送Package /// /// 发送 /// /// /// 协议 /// 包 /// 估计的包最大值,其作用是用于的申请。 public static void Send(this IDmtpActorObject client, ushort protocol, IPackage package, int maxSize) { using (var byteBlock = new ByteBlock(maxSize)) { package.Package(byteBlock); client.DmtpActor.Send(protocol, byteBlock); } } /// /// 发送估计小于64K的 /// /// /// 协议 /// 包 public static void Send(this IDmtpActorObject client, ushort protocol, IPackage package) { Send(client, protocol, package, 1024 * 64); } /// /// 发送 /// /// /// 协议 /// 包 /// 估计的包最大值,其作用是用于的申请。 public static Task SendAsync(this IDmtpActorObject client, ushort protocol, IPackage package, int maxSize) { return Task.Run(() => { Send(client, protocol, package, maxSize); }); } /// /// 发送估计小于64K的 /// /// /// 协议 /// 包 public static Task SendAsync(this IDmtpActorObject client, ushort protocol, IPackage package) { return Task.Run(() => { Send(client, protocol, package, 1024 * 64); }); } #endregion 发送Package #region 尝试发送Package /// /// 发送 /// /// /// 协议 /// 包 /// 估计的包最大值,其作用是用于的申请。 public static bool TrySend(this IDmtpActorObject client, ushort protocol, IPackage package, int maxSize) { try { Send(client, protocol, package, maxSize); return true; } catch { return false; } } /// /// 发送估计小于64K的 /// /// /// 协议 /// 包 public static bool TrySend(this IDmtpActorObject client, ushort protocol, IPackage package) { try { Send(client, protocol, package, 1024 * 64); return true; } catch { return false; } } /// /// 发送 /// /// /// 协议 /// 包 /// 估计的包最大值,其作用是用于的申请。 public static async Task TrySendAsync(this IDmtpActorObject client, ushort protocol, IPackage package, int maxSize) { try { await SendAsync(client, protocol, package, maxSize); return true; } catch { return false; } } /// /// 发送估计小于64K的 /// /// /// 协议 /// 包 public static async Task TrySendAsync(this IDmtpActorObject client, ushort protocol, IPackage package) { try { await SendAsync(client, protocol, package, 1024 * 64); return true; } catch { return false; } } #endregion 尝试发送Package #region 发送 /// /// 发送 /// /// /// /// public static void Send(this IDmtpActorObject client, ushort protocol, byte[] buffer) { client.DmtpActor.Send(protocol, buffer, 0, buffer.Length); } /// /// 发送 /// /// /// /// /// /// public static void Send(this IDmtpActorObject client, ushort protocol, byte[] buffer, int offset, int length) { client.DmtpActor.Send(protocol, buffer, offset, length); } /// /// 发送 /// /// /// public static void Send(this IDmtpActorObject client, ushort protocol) { client.DmtpActor.Send(protocol, TouchSocketCoreUtility.ZeroBytes, 0, 0); } /// /// 发送 /// /// /// /// public static void Send(this IDmtpActorObject client, ushort protocol, ByteBlock byteBlock) { client.DmtpActor.Send(protocol, byteBlock.Buffer, 0, byteBlock.Len); } /// /// 发送 /// /// /// /// /// public static Task SendAsync(this IDmtpActorObject client, ushort protocol, byte[] buffer) { return client.DmtpActor.SendAsync(protocol, buffer, 0, buffer.Length); } /// /// 发送 /// /// /// /// public static Task SendAsync(this IDmtpActorObject client, ushort protocol) { return client.DmtpActor.SendAsync(protocol, TouchSocketCoreUtility.ZeroBytes, 0, 0); } #endregion 发送 /// /// 转为ResultCode /// /// /// public static ResultCode ToResultCode(this ChannelStatus channelStatus) { switch (channelStatus) { case ChannelStatus.Default: return ResultCode.Default; case ChannelStatus.Overtime: return ResultCode.Overtime; case ChannelStatus.Cancel: return ResultCode.Canceled; case ChannelStatus.Completed: return ResultCode.Success; case ChannelStatus.Moving: case ChannelStatus.Disposed: default: return ResultCode.Error; } } } }