From 46c9edc244f0167d8b35d169f987030234303e67 Mon Sep 17 00:00:00 2001 From: icewint Date: Wed, 29 May 2024 12:56:32 +0800 Subject: [PATCH] =?UTF-8?q?[important]=E8=83=BD=E7=82=B9=E4=BA=AE?= =?UTF-8?q?=E7=94=B5=E5=AD=90=E6=A0=87=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CirculationTask/ElTag/LightElTag.cs | 70 ++++++++++++++ WcsMain/Common/CommonData.cs | 10 +- WcsMain/DataBase/Dao/AppElTagBaseDao.cs | 43 +++++++++ WcsMain/DataBase/Dao/AppElTagTaskDao.cs | 66 +++++++++++++ WcsMain/DataBase/TableEntity/AppElTagTask.cs | 88 +++++++++++++++++ WcsMain/ElTag/Atop/ConnectOprServe.cs | 94 ++++++++++++++++++- WcsMain/ElTag/Atop/Entity/TagReturnInfo.cs | 17 +++- WcsMain/ElTag/Atop/Entity/TagSendInfo.cs | 68 +++++++++++++- WcsMain/ElTag/Atop/OprTcpClient.cs | 11 --- WcsMain/Enum/TaskEnum/ElTagTaskStatusEnum.cs | 14 +++ WcsMain/StartAction/ServiceStart.cs | 20 +++- WcsMain/Tcp/Client/BaseTcpClient.cs | 9 +- 12 files changed, 483 insertions(+), 27 deletions(-) create mode 100644 WcsMain/Business/CirculationTask/ElTag/LightElTag.cs create mode 100644 WcsMain/DataBase/Dao/AppElTagBaseDao.cs create mode 100644 WcsMain/DataBase/Dao/AppElTagTaskDao.cs create mode 100644 WcsMain/DataBase/TableEntity/AppElTagTask.cs create mode 100644 WcsMain/Enum/TaskEnum/ElTagTaskStatusEnum.cs diff --git a/WcsMain/Business/CirculationTask/ElTag/LightElTag.cs b/WcsMain/Business/CirculationTask/ElTag/LightElTag.cs new file mode 100644 index 0000000..b57f9e4 --- /dev/null +++ b/WcsMain/Business/CirculationTask/ElTag/LightElTag.cs @@ -0,0 +1,70 @@ +using CirculateTool; +using WcsMain.Common; +using WcsMain.DataBase.Dao; +using WcsMain.DataBase.TableEntity; +using WcsMain.ElTag.Atop; +using WcsMain.ElTag.Atop.Entity; +using WcsMain.Enum.TaskEnum; + +namespace WcsMain.Business.CirculationTask.ElTag; + + +[Circulation] +public class LightElTag(AppElTagTaskDao tagTaskDao, ConnectOprServe connectOprServe) +{ + + private readonly AppElTagTaskDao _tagTaskDao = tagTaskDao; + private readonly ConnectOprServe _connectOprServe = connectOprServe; + + /// + /// 点亮电子标签 + /// + /// + [Circulation("点亮电子标签")] + public bool Light() + { + List? tasks = _tagTaskDao.Query(new AppElTagTask { TaskStatus = (int)ElTagTaskStatusEnum.NeedLight }); + if (tasks == default) + { + ConsoleLog.Exception("【异常】查询 电子标签 任务失败,数据库连接异常"); + Thread.Sleep(5000); + return true; + } + tasks.ForEach(LightTask); + return true; + } + + /// + /// 执行点亮标签任务 + /// + /// + public void LightTask(AppElTagTask tagTask) + { + if (CommonData.AppElTags == default || CommonData.AppElTags.Count < 1) return; + var tagInfo = CommonData.AppElTags.Find(f => f.Location == tagTask.Location); + if(tagInfo == default) + { + ConsoleLog.Warning($"【警告】电子标签:{tagTask.Location} 不存在,无法点亮"); + _tagTaskDao.Update(new AppElTagTask + { + TaskId = tagTask.TaskId, + TaskStatus = (int)ElTagTaskStatusEnum.Error, + ConfirmTime = DateTime.Now, + Remark = "点位不存在" + }); + return; + } + /* 点亮标签 */ + var resultException = _connectOprServe.ShowMsg(tagInfo.ControllerDisplayName, tagInfo.TagId, tagTask.NeedNum); + if(resultException == default ) + { + _tagTaskDao.Update(new AppElTagTask + { + TaskId = tagTask.TaskId, + TaskStatus = (int)ElTagTaskStatusEnum.Lighting, + LightTime = DateTime.Now, + }); + } + } + +} diff --git a/WcsMain/Common/CommonData.cs b/WcsMain/Common/CommonData.cs index e970ce4..20f80a5 100644 --- a/WcsMain/Common/CommonData.cs +++ b/WcsMain/Common/CommonData.cs @@ -10,11 +10,6 @@ namespace WcsMain.Common; /// public static class CommonData { - /// - /// IOC - /// - [NotNull] - public static IContainer? Container { get; set; } /// /// 系统设置项,加载于 appsettings.json @@ -40,6 +35,11 @@ public static class CommonData [NotNull] public static List? AppLocations { get; set; } + /// + /// 电子标签基础资料 + /// + [NotNull] + public static List? AppElTags { get; set; } /// diff --git a/WcsMain/DataBase/Dao/AppElTagBaseDao.cs b/WcsMain/DataBase/Dao/AppElTagBaseDao.cs new file mode 100644 index 0000000..2eddd74 --- /dev/null +++ b/WcsMain/DataBase/Dao/AppElTagBaseDao.cs @@ -0,0 +1,43 @@ +using WcsMain.Common; +using WcsMain.DataBase.TableEntity; +using WcsMain.WcsAttribute.AutoFacAttribute; + +namespace WcsMain.DataBase.Dao; + +[Component] +public class AppElTagBaseDao +{ + + /// + /// 条件查询 + /// + /// + /// + public List? Query(AppElTagBase queryData) + { + try + { + var sqlFuc = CommonTool.DbServe.Queryable() + .WhereIF(queryData.Location != default, w => w.Location == queryData.Location) + .WhereIF(queryData.TagName != default, w => w.TagName == queryData.TagName) + .WhereIF(queryData.TagId != default, w => w.TagId == queryData.TagId) + .WhereIF(queryData.TagType != default, w => w.TagType == queryData.TagType) + .WhereIF(queryData.ControllerDisplayName != default, w => w.ControllerDisplayName == queryData.ControllerDisplayName) + .WhereIF(queryData.Area != default, w => w.Area == queryData.Area) + .WhereIF(queryData.LedStatus != default, w => w.LedStatus == queryData.LedStatus) + .WhereIF(queryData.Remark != default, w => w.Remark == queryData.Remark); + return sqlFuc.ToList(); + } + catch(Exception ex) + { + _ = ex; + return default; + } + } + + /// + /// 查询所有 + /// + /// + public List? Query() => Query(new AppElTagBase()); +} diff --git a/WcsMain/DataBase/Dao/AppElTagTaskDao.cs b/WcsMain/DataBase/Dao/AppElTagTaskDao.cs new file mode 100644 index 0000000..7b9db1d --- /dev/null +++ b/WcsMain/DataBase/Dao/AppElTagTaskDao.cs @@ -0,0 +1,66 @@ +using WcsMain.Common; +using WcsMain.DataBase.TableEntity; +using WcsMain.WcsAttribute.AutoFacAttribute; + +namespace WcsMain.DataBase.Dao; + +[Component] +public class AppElTagTaskDao +{ + + /// + /// 条件查询 + /// + /// + /// + public List? Query(AppElTagTask queryData) + { + try + { + var sqlFuc = CommonTool.DbServe.Queryable() + .WhereIF(queryData.TaskId != default, w => w.TaskId == queryData.TaskId) + .WhereIF(queryData.Location != default, w => w.Location == queryData.Location) + .WhereIF(queryData.OrderId != default, w => w.OrderId == queryData.OrderId) + .WhereIF(queryData.VehicleNo != default, w => w.VehicleNo == queryData.VehicleNo) + .WhereIF(queryData.GoodsId != default, w => w.GoodsId == queryData.GoodsId) + .WhereIF(queryData.GoodsName != default, w => w.GoodsName == queryData.GoodsName) + .WhereIF(queryData.TaskStatus != default, w => w.TaskStatus == queryData.TaskStatus) + .WhereIF(queryData.NeedNum != default, w => w.NeedNum == queryData.NeedNum) + .WhereIF(queryData.PickNum != default, w => w.PickNum == queryData.PickNum) + .WhereIF(queryData.Remark != default, w => w.Remark == queryData.Remark); + return sqlFuc.ToList(); + } + catch(Exception ex) + { + _ = ex; + return default; + } + } + + /// + /// 全部查询 + /// + /// + public List? Query() => Query(new AppElTagTask()); + + + /// + /// 根据主键更新 + /// + /// + /// + public int Update(AppElTagTask updateData) + { + try + { + var sqlFuc = CommonTool.DbServe.Updateable(updateData).IgnoreColumns(ignoreAllNullColumns: true); + return sqlFuc.ExecuteCommand(); + } + catch (Exception ex) + { + _ = ex; + return 0; + } + } + +} diff --git a/WcsMain/DataBase/TableEntity/AppElTagTask.cs b/WcsMain/DataBase/TableEntity/AppElTagTask.cs new file mode 100644 index 0000000..106e021 --- /dev/null +++ b/WcsMain/DataBase/TableEntity/AppElTagTask.cs @@ -0,0 +1,88 @@ +using SqlSugar; + +namespace WcsMain.DataBase.TableEntity; + +[SugarTable("tbl_app_eltag_task")] +public class AppElTagTask +{ + /// + /// 任务号 + /// + [SugarColumn(ColumnName = "task_id", IsPrimaryKey = true)] + public string? TaskId { get; set; } + + /// + /// 点位 + /// + [SugarColumn(ColumnName = "location")] + public string? Location { get; set; } + + /// + /// 订单号 + /// + [SugarColumn(ColumnName = "order_id")] + public string? OrderId { get; set; } + + /// + /// 载具号 + /// + [SugarColumn(ColumnName = "vehicle_no")] + public string? VehicleNo { get; set; } + + /// + /// 物料编号 + /// + [SugarColumn(ColumnName = "goods_id")] + public string? GoodsId { get; set; } + + /// + /// 物料名称 + /// + [SugarColumn(ColumnName = "goods_name")] + public string? GoodsName { get; set; } + + /// + /// 任务状态 + /// + [SugarColumn(ColumnName = "task_status")] + public int? TaskStatus { get; set; } + + /// + /// 需求数量 + /// + [SugarColumn(ColumnName = "need_num")] + public int? NeedNum { get; set; } + + /// + /// 拣选数量 + /// + [SugarColumn(ColumnName = "pick_num")] + public int? PickNum { get; set; } + + /// + /// 任务创建时间 + /// + [SugarColumn(ColumnName = "create_time")] + public DateTime? CreateTime { get; set; } + + /// + /// 点亮时间 + /// + [SugarColumn(ColumnName = "light_time")] + public DateTime? LightTime { get; set; } + + /// + /// 确认时间 + /// + [SugarColumn(ColumnName = "confirm_time")] + public DateTime? ConfirmTime { get; set;} + + /// + /// 备注 + /// + [SugarColumn(ColumnName = "remark")] + public string? Remark { get; set; } + + + +} diff --git a/WcsMain/ElTag/Atop/ConnectOprServe.cs b/WcsMain/ElTag/Atop/ConnectOprServe.cs index d0f4acc..fd51f75 100644 --- a/WcsMain/ElTag/Atop/ConnectOprServe.cs +++ b/WcsMain/ElTag/Atop/ConnectOprServe.cs @@ -1,7 +1,12 @@ -using WcsMain.Common; +using LedSimple; +using System.Xml.Linq; +using WcsMain.Common; using WcsMain.DataBase.Dao; using WcsMain.DataBase.TableEntity; +using WcsMain.ElTag.Atop.AtopEnum; +using WcsMain.ElTag.Atop.Entity; using WcsMain.Enum.General; +using WcsMain.Enum.TaskEnum; using WcsMain.Enum.Tcp; using WcsMain.Tcp.Entity; using WcsMain.WcsAttribute.AutoFacAttribute; @@ -26,7 +31,7 @@ public class ConnectOprServe(AppTcpDao tcpDao, BaseOprDataHandler baseOprDataHan CommonTool.OprTcpClient = new OprTcpClient(); CommonTool.OprTcpClient.SetConnecting((tcpData) => ConsoleLog.Info($"电子标签:{tcpData} 正在连接")); CommonTool.OprTcpClient.SetConnectFailAction((tcpData, ex) => ConsoleLog.Warning($"电子标签:{tcpData} 连接失败,参考信息:{ex.Message}")); - CommonTool.OprTcpClient.SetConnectSuccess((tcpData) => ConsoleLog.Success($"电子标签:{tcpData} 连接成功")); + CommonTool.OprTcpClient.SetConnectSuccess(ConnectSuccess); CommonTool.OprTcpClient.SetConnectOffline((tcpData) => ConsoleLog.Warning($"电子标签:{tcpData} 失去连接")); CommonTool.OprTcpClient.SetGetData(GetData); } @@ -52,6 +57,66 @@ public class ConnectOprServe(AppTcpDao tcpDao, BaseOprDataHandler baseOprDataHan }, TaskCreationOptions.LongRunning); } + /// + /// 连接成功的事件 ---- 重置标签 + /// + /// + public void ConnectSuccess(TcpServeConnectionData tcpServe) + { + ConsoleLog.Success($"电子标签:{tcpServe.TcpServe!.TcpIp} 连接成功"); + if (CommonData.AppElTags == default || CommonData.AppElTags.Count < 1) return; + var tagInfos = CommonData.AppElTags.FindAll(f => f.ControllerDisplayName == tcpServe.DisplayName); + if (tagInfos == default) return; + + foreach (var tagInfo in tagInfos) + { + + //CommonTool.OprTcpClient.Send(TagSendInfo.SetTagModel(Convert.ToByte(tagInfo.TagId), TagMode.Picking), tagInfo.ControllerDisplayName!); + //CommonTool.OprTcpClient.Send(TagSendInfo.(Convert.ToByte(tagInfo.TagId)), tagInfo.ControllerDisplayName!); + } + for (int i = 0; i < 5; i++) + { + foreach (var tagInfo in tagInfos) + { + CommonTool.OprTcpClient.Send(TagSendInfo.ShowTagId(Convert.ToByte(tagInfo.TagId)), tagInfo.ControllerDisplayName!); + //CommonTool.OprTcpClient.Send(TagSendInfo.LedColor(Convert.ToByte(tagInfo.TagId), LedColor.Green), tagInfo.ControllerDisplayName!); + //ShowMsg(tagInfo.ControllerDisplayName, tagInfo.TagId, 999, ledStatus: LedStatus.LEDOn); + } + Thread.Sleep(200); + foreach (var tagInfo in tagInfos) + { + CommonTool.OprTcpClient.Send(TagSendInfo.TurnOffTag(Convert.ToByte(tagInfo.TagId)), tagInfo.ControllerDisplayName!); + } + Thread.Sleep(200); + } + + } + + /// + /// 向标签发送一个显示值 + /// + /// + /// + /// + /// + /// + /// + public Exception? ShowMsg(string? controllerDisplayName, int? tagId, int? value, LedColor ledColor = LedColor.Green, LedStatus ledStatus = LedStatus._0_5secblinking) + { + if(controllerDisplayName == default || tagId == default || value == default) + { + return new Exception("必须的值为空,无法发送电子标签"); + } + + if (value > 999) value = 999; + byte[] elTagData = TagSendInfo.ShowValue(Convert.ToByte(tagId), value.ToString()!); + var sendResult = CommonTool.OprTcpClient.Send(elTagData, controllerDisplayName); // 显示字符 + CommonTool.OprTcpClient.Send(TagSendInfo.LedColor(Convert.ToByte(tagId), ledColor), controllerDisplayName); // 显示颜色 + CommonTool.OprTcpClient.Send(TagSendInfo.LedStatus(Convert.ToByte(tagId), ledStatus), controllerDisplayName); // 显示闪烁频率 + if (sendResult.Success) return default; + return sendResult.Exception; + } + @@ -62,6 +127,31 @@ public class ConnectOprServe(AppTcpDao tcpDao, BaseOprDataHandler baseOprDataHan /// public void GetData(TcpServeConnectionData tcpServe, byte[] datas) { + TagReturnInfo returnInfo = new() + { + ControllerDisplayName = tcpServe.DisplayName, + Ip = tcpServe.TcpServe!.TcpIp, + Port = Convert.ToInt32(datas[2]) == 0x60 ? 1 : 2, + SubCommand = Convert.ToInt32(datas[6]), + TagId = datas.Length > 7 ? Convert.ToInt32(datas[7]) : 0 + }; + if (returnInfo.SubCommand == 6 || returnInfo.SubCommand == 7) + { + if (datas[8] >= 160) returnInfo.SubCommand = 8; + + List returnData = []; + for (int i = 8; i < datas.Length; i++) + { + if (i == 8 && datas[8] >= 160) + { + returnData.Add(datas[8] == 160 ? Convert.ToString(Convert.ToChar(32)) : Convert.ToString(Convert.ToChar(datas[8] - 128))); + continue; + } + if (datas[i] > 0) returnData.Add(Convert.ToString(Convert.ToChar(datas[i]))); + } + returnInfo.Data = string.Join("", returnData); + } + ConsoleLog.Info($"电子标签获取返回值:{returnInfo}"); } diff --git a/WcsMain/ElTag/Atop/Entity/TagReturnInfo.cs b/WcsMain/ElTag/Atop/Entity/TagReturnInfo.cs index 95b315d..8645363 100644 --- a/WcsMain/ElTag/Atop/Entity/TagReturnInfo.cs +++ b/WcsMain/ElTag/Atop/Entity/TagReturnInfo.cs @@ -2,6 +2,10 @@ public class TagReturnInfo { + /// + /// 控制器别称 + /// + public string? ControllerDisplayName { get; set; } /// /// 按下的按键类型 @@ -36,8 +40,10 @@ public class TagReturnInfo public string? Ip { get; set; } - - public int Abbr { get; set; } + /// + /// 标签 ID + /// + public int TagId { get; set; } /// /// 传回消息的端口 ---- 注意不是控制器端口 @@ -48,4 +54,11 @@ public class TagReturnInfo /// 返回的数据 /// public string? Data { get; set; } + + + + public override string ToString() + { + return $"控制器别称:{ControllerDisplayName},标签Id:{TagId},提交方式:{SubCommand},提交数据:{Data}"; + } } diff --git a/WcsMain/ElTag/Atop/Entity/TagSendInfo.cs b/WcsMain/ElTag/Atop/Entity/TagSendInfo.cs index 2187093..585b595 100644 --- a/WcsMain/ElTag/Atop/Entity/TagSendInfo.cs +++ b/WcsMain/ElTag/Atop/Entity/TagSendInfo.cs @@ -8,6 +8,38 @@ namespace WcsMain.ElTag.Atop.Entity; /// public class TagSendInfo { + /// + /// 标签自检 ???? + /// + /// + public static byte[] CheckAllTag() + { + byte[] data = new byte[7]; + data[0] = 7; + data[1] = 0; + data[2] = 0x60; + data[6] = 0x09; + return data; + } + + /// + /// 设置标签模式 + /// + /// + /// + /// + public static byte[] SetTagModel(byte tagId, TagMode tagMode) + { + byte[] data = new byte[8]; + data[0] = 8; + data[1] = 0; + data[2] = 0x60; + data[6] = tagMode == TagMode.Stock ? (byte)0x19 : (byte)0x1A; + data[7] = tagId; + return data; + } + + /// /// 展示标签的ID /// @@ -73,7 +105,7 @@ public class TagSendInfo data[6] = 0x1F; data[7] = tagId; data[8] = 0; - data[9] = (byte)ledColor; + data[9] = Convert.ToByte(ledColor); return data; } @@ -92,7 +124,39 @@ public class TagSendInfo data[6] = 0x1F; data[7] = tagId; data[8] = 4; - data[9] = (byte)ledStatus; + data[9] = Convert.ToByte(ledStatus); + return data; + } + + /// + /// 展示字符串 + /// + /// + /// + /// + public static byte[] ShowValue(byte tagId, string? value) + { + if(string.IsNullOrEmpty(value)) value = string.Empty; + if(value.Length < 6) + { + value = value.PadLeft(6, '0'); + } + else + { + value = value.Substring(value.Length - 6, 6); + } + byte[] data = new byte[15]; + data[0] = 0x0f; + data[1] = 0; + data[2] = 0x60; + + data[6] = 0x00; + data[7] = tagId; + for (int i = 0; i < value.Length; i++) + { + data[8 + i] = Convert.ToByte(value[i]); + } + data[14] = 0x00; return data; } } diff --git a/WcsMain/ElTag/Atop/OprTcpClient.cs b/WcsMain/ElTag/Atop/OprTcpClient.cs index 663bf24..3266918 100644 --- a/WcsMain/ElTag/Atop/OprTcpClient.cs +++ b/WcsMain/ElTag/Atop/OprTcpClient.cs @@ -11,17 +11,6 @@ namespace WcsMain.ElTag.Atop; /// public class OprTcpClient : BaseTcpClient { - - /// - /// 连接电子标签客户端 - /// - public void Send() - { - - - - } - } diff --git a/WcsMain/Enum/TaskEnum/ElTagTaskStatusEnum.cs b/WcsMain/Enum/TaskEnum/ElTagTaskStatusEnum.cs new file mode 100644 index 0000000..773099f --- /dev/null +++ b/WcsMain/Enum/TaskEnum/ElTagTaskStatusEnum.cs @@ -0,0 +1,14 @@ +namespace WcsMain.Enum.TaskEnum; + +/// +/// 电子标签任务状态枚举 +/// +public enum ElTagTaskStatusEnum +{ + NeedLight = 0, // 待点亮 + Lighting = 1, // 点亮种 + Confirm = 2, // 已确认 + Error = 9, // 发生异常 + + +} diff --git a/WcsMain/StartAction/ServiceStart.cs b/WcsMain/StartAction/ServiceStart.cs index 5b646ab..0ac441f 100644 --- a/WcsMain/StartAction/ServiceStart.cs +++ b/WcsMain/StartAction/ServiceStart.cs @@ -19,7 +19,7 @@ namespace WcsMain.StartAction; [Component] public class ServiceStart(WcsCirculation wcsCirculation, ConnectPLCs connectPLCs, SocketOperation socketOperation, AppStackerDao appStackerDao, AppLocationDao appLocationDao, AppConfigDao appConfigDao, ConnectPlcServe connectPlcServe, - ConnectOprServe connectOprServe) + ConnectOprServe connectOprServe, AppElTagBaseDao appElTagBaseDao) { private readonly AppConfigDao _appconfigDao = appConfigDao; private readonly AppLocationDao _applocationDao = appLocationDao; @@ -29,6 +29,7 @@ public class ServiceStart(WcsCirculation wcsCirculation, ConnectPLCs connectPLCs private readonly WcsCirculation _wcsCirculation = wcsCirculation; private readonly ConnectPlcServe _connectPlcServe = connectPlcServe; private readonly ConnectOprServe _connectOprServe = connectOprServe; + private readonly AppElTagBaseDao _appElTagBaseDao = appElTagBaseDao; private static string _errMsg = string.Empty; @@ -40,6 +41,7 @@ public class ServiceStart(WcsCirculation wcsCirculation, ConnectPLCs connectPLCs LoadingConfig(); // 加载数据库中的配置项 (config 表) LoadingStackerData(); // 加载数据库中的堆垛机信息 LoadingLocationData(); // 加载数据库中的库位信息 + LoadElTagBase(); // 加载电子标签基础资料 if (!string.IsNullOrEmpty(_errMsg)) { @@ -195,4 +197,20 @@ public class ServiceStart(WcsCirculation wcsCirculation, ConnectPLCs connectPLCs CommonData.AppLocations = appLocations; } + /// + /// 加载电子标签基础资料 + /// + public void LoadElTagBase() + { + if (!string.IsNullOrEmpty(_errMsg)) return; + ConsoleLog.Info("正在加载库位信息..."); + List? eltags = _appElTagBaseDao.Query(); + if (eltags == default) + { + _errMsg = "加载电子标签基础信息失败,请检查数据库服务器连接是否正常"; + CommonData.AppElTags = []; + return; + } + CommonData.AppElTags = eltags; + } } \ No newline at end of file diff --git a/WcsMain/Tcp/Client/BaseTcpClient.cs b/WcsMain/Tcp/Client/BaseTcpClient.cs index 0692908..bc2264b 100644 --- a/WcsMain/Tcp/Client/BaseTcpClient.cs +++ b/WcsMain/Tcp/Client/BaseTcpClient.cs @@ -108,9 +108,10 @@ public class BaseTcpClient int readLength = await networkStream.ReadAsync(bytes); if (readLength > 0) { + bytes = bytes.Take(readLength).ToArray(); serveData.RecvMsgTime = DateTime.Now; - _getData?.BeginInvoke(serveData, bytes, null, null); - _getMessage?.BeginInvoke(serveData, Encoding.ASCII.GetString(bytes), null, null); + _getData?.Invoke(serveData, bytes); + _getMessage?.Invoke(serveData, Encoding.ASCII.GetString(bytes)); continue; } _connectOffline?.Invoke(serveData); @@ -173,10 +174,10 @@ public class BaseTcpClient } if (tcpServe.TcpClient == default) return; // 尝试发送消息 - var networkStream = tcpServe.TcpClient.GetStream(); - byte[] bytes = []; try { + var networkStream = tcpServe.TcpClient.GetStream(); + byte[] bytes = []; networkStream.Write(bytes); } catch