1.WebSocket登录注册
2.数据重发机制
This commit is contained in:
@ -22,17 +22,10 @@ namespace WCS.BLL
|
||||
/// </summary>
|
||||
Info,
|
||||
/// <summary>
|
||||
/// 警告
|
||||
/// 启动信息
|
||||
/// </summary>
|
||||
Warning,
|
||||
/// <summary>
|
||||
/// 错误
|
||||
/// </summary>
|
||||
Err,
|
||||
/// <summary>
|
||||
/// 数据库错误
|
||||
/// </summary>
|
||||
DbErr,
|
||||
StartBoot,
|
||||
|
||||
Api
|
||||
}
|
||||
|
||||
@ -115,16 +108,6 @@ namespace WCS.BLL
|
||||
Write($"{contentTitle} {JsonConvert.SerializeObject(content)}", type);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 写入日志
|
||||
/// </summary>
|
||||
/// <param name="ex">错误</param>
|
||||
/// <returns>是否写入成功</returns>
|
||||
public static void Write(Exception ex, LogsType type = LogsType.Err)
|
||||
{
|
||||
Write(ex.ToString(), type);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清除日志
|
||||
/// </summary>
|
||||
|
@ -94,7 +94,7 @@ namespace WCS.BLL
|
||||
continue;
|
||||
}
|
||||
//获取返回指令的板子ID
|
||||
var boardId = (data[PreFixLength + 0] << 8) + data[PreFixLength + 1];
|
||||
var boardId = (dataTemp[PreFixLength + 0] << 8) + dataTemp[PreFixLength + 1];
|
||||
//查询当前板子是否有待验证的指令
|
||||
var message = new MessageDto();
|
||||
MessageList.TryGetValue(boardId, out message);
|
||||
@ -103,7 +103,7 @@ namespace WCS.BLL
|
||||
{
|
||||
MessageList.TryRemove(boardId, out message);
|
||||
}
|
||||
index += (PreFixLength + DataLength - 1);//每次循环index会+1 所以这里-1
|
||||
index += (PreFixLength + DataLength - 2);//每次循环index会+1 所以这里-1
|
||||
}
|
||||
}
|
||||
Logs.Write($"校验发送接收处理完毕" + BitConverter.ToString(data));
|
||||
@ -131,24 +131,21 @@ namespace WCS.BLL
|
||||
try
|
||||
{
|
||||
//TODO如果指令已发两次 则取消重发
|
||||
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
|
||||
await Task.Delay(100);
|
||||
if (MessageList.Count > 0)
|
||||
{
|
||||
var failedMessage = MessageList.Where(t => t.Value.SendTimes >= 2).ToList();
|
||||
var failedMessage = MessageList.Where(t => t.Value.LastSendTime < DateTime.Now.AddSeconds(-1))
|
||||
.ToList();
|
||||
foreach (var message in failedMessage)
|
||||
{
|
||||
Logs.Write(BitConverter.ToString(message.Value.Message) +
|
||||
"指令未响应");
|
||||
Logs.Write(BitConverter.ToString(message.Value.Message) + "指令超时1s未响应");
|
||||
}
|
||||
MessageList.RemoveWhen(t => t.Value.SendTimes >= 3);
|
||||
|
||||
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
|
||||
MessageList.RemoveWhen(t => t.Value.SendTimes >= 2);
|
||||
foreach (var item in MessageList)
|
||||
{
|
||||
if (item.Value.LastSendTime < DateTime.Now.AddSeconds(-1))
|
||||
{
|
||||
tcpClient.Send(item.Value.Message);
|
||||
Send(item.Value.Message);
|
||||
item.Value.SendTimes++;
|
||||
item.Value.LastSendTime = DateTime.Now;
|
||||
await Task.Delay(10);
|
||||
@ -173,17 +170,25 @@ namespace WCS.BLL
|
||||
}
|
||||
|
||||
|
||||
public void Send(byte[] message)
|
||||
public void Send(byte[] message, bool IsReSend = false)
|
||||
{
|
||||
try
|
||||
{
|
||||
var boardId = (message[3] << 8) + message[4];
|
||||
if (boardId != 2047 && IsReSend == false)
|
||||
{
|
||||
MessageList.TryAdd(boardId, new MessageDto()
|
||||
{
|
||||
ID = boardId,
|
||||
Message = message,
|
||||
});
|
||||
}
|
||||
|
||||
lock (sendLockObject)
|
||||
{
|
||||
tcpClient.Send(message);
|
||||
//TODO MessageList.AddOrUpdate(new Mes)
|
||||
//发送自带10ms间隔
|
||||
Thread.Sleep(10);
|
||||
//发送自带8ms间隔
|
||||
Thread.Sleep(8);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
@ -226,18 +231,14 @@ namespace WCS.BLL
|
||||
public class MessageDto
|
||||
{
|
||||
public int ID { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 最后一次发送时间
|
||||
/// </summary>
|
||||
public DateTime LastSendTime { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 发送内容
|
||||
/// </summary>
|
||||
public byte[] Message { get; set; }
|
||||
|
||||
public bool IsWating { get; set; }
|
||||
/// <summary>
|
||||
/// 发送次数
|
||||
/// </summary>
|
||||
|
Reference in New Issue
Block a user