fix: 添加互斥锁,并增加更多log输出
This commit is contained in:
		@@ -155,11 +155,14 @@ public class UDPServer
 | 
			
		||||
            isTimeout = elapsed >= TimeSpan.FromMilliseconds(timeout);
 | 
			
		||||
            if (isTimeout) break;
 | 
			
		||||
 | 
			
		||||
            if (udpData.TryGetValue($"{ipAddr}-{taskID}", out var dataQueue) &&
 | 
			
		||||
                dataQueue.TryDequeue(out data))
 | 
			
		||||
            lock (udpData)
 | 
			
		||||
            {
 | 
			
		||||
                // logger.Debug($"Find UDP Data: {data.ToString()}");
 | 
			
		||||
                break;
 | 
			
		||||
                if (udpData.TryGetValue($"{ipAddr}-{taskID}", out var dataQueue) &&
 | 
			
		||||
                    dataQueue.TryDequeue(out data))
 | 
			
		||||
                {
 | 
			
		||||
                    // logger.Debug($"Find UDP Data: {data.ToString()}");
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            await Task.Delay(cycle);
 | 
			
		||||
@@ -195,15 +198,18 @@ public class UDPServer
 | 
			
		||||
            isTimeout = elapsed >= TimeSpan.FromMilliseconds(timeout);
 | 
			
		||||
            if (isTimeout) break;
 | 
			
		||||
 | 
			
		||||
            if (udpData.TryGetValue($"{ipAddr}-{taskID}", out var dataQueue) &&
 | 
			
		||||
                !dataQueue.IsEmpty)
 | 
			
		||||
            lock (udpData)
 | 
			
		||||
            {
 | 
			
		||||
                data = new List<UDPData>();
 | 
			
		||||
                while (dataQueue.TryDequeue(out var item))
 | 
			
		||||
                if (udpData.TryGetValue($"{ipAddr}-{taskID}", out var dataQueue) &&
 | 
			
		||||
                    !dataQueue.IsEmpty)
 | 
			
		||||
                {
 | 
			
		||||
                    data.Add(item);
 | 
			
		||||
                    data = new List<UDPData>();
 | 
			
		||||
                    while (dataQueue.TryDequeue(out var item))
 | 
			
		||||
                    {
 | 
			
		||||
                        data.Add(item);
 | 
			
		||||
                    }
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -360,7 +366,7 @@ public class UDPServer
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var udpDataObj = RecordUDPData(data, endPoint, time, Convert.ToInt32(data[1]));
 | 
			
		||||
            PrintData(udpDataObj);
 | 
			
		||||
            // PrintData(udpDataObj);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -378,15 +384,22 @@ public class UDPServer
 | 
			
		||||
            HasRead = false,
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        var key = $"{remoteAddress}-{taskID}";
 | 
			
		||||
        var dataQueue = udpData.GetOrAdd(key, _ => new ConcurrentQueue<UDPData>());
 | 
			
		||||
        dataQueue.Enqueue(data);
 | 
			
		||||
 | 
			
		||||
        // 对队列进行一次按时间排序
 | 
			
		||||
        var sorted = dataQueue.OrderBy(d => d.DateTime).ToList();
 | 
			
		||||
        udpData.TryUpdate(key, new ConcurrentQueue<UDPData>(sorted), dataQueue);
 | 
			
		||||
        lock (udpData)
 | 
			
		||||
        {
 | 
			
		||||
            var key = $"{remoteAddress}-{taskID}";
 | 
			
		||||
            var dataQueue = udpData.GetOrAdd(key, _ => new ConcurrentQueue<UDPData>());
 | 
			
		||||
            dataQueue.Enqueue(data);
 | 
			
		||||
 | 
			
		||||
        logger.Debug($"Test dataQueue.Count = {udpData[key].Count}");
 | 
			
		||||
            // 对队列进行一次按时间排序
 | 
			
		||||
            if (dataQueue.Count > 0)
 | 
			
		||||
            {
 | 
			
		||||
                var sorted = dataQueue.OrderBy(d => d.DateTime).ToList();
 | 
			
		||||
                udpData.TryUpdate(key, new ConcurrentQueue<UDPData>(sorted), dataQueue);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            PrintAllData();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return data;
 | 
			
		||||
    }
 | 
			
		||||
@@ -395,7 +408,7 @@ public class UDPServer
 | 
			
		||||
    /// 输出UDP Data到log中
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    /// <param name="data">UDP数据</param>
 | 
			
		||||
    public void PrintData(UDPData data)
 | 
			
		||||
    public string PrintData(UDPData data)
 | 
			
		||||
    {
 | 
			
		||||
        var bytes = data.Data;
 | 
			
		||||
        var sign = bytes[0];
 | 
			
		||||
@@ -433,6 +446,11 @@ public class UDPServer
 | 
			
		||||
        // logger.Debug($"Receive Data from {data.Address}:{data.Port} at {data.DateTime.ToString()}:");
 | 
			
		||||
        // logger.Debug($"  Original Data : {BitConverter.ToString(bytes).Replace("-", " ")}");
 | 
			
		||||
        // if (recvData.Length != 0) logger.Debug($"  Decoded Data  : {recvData}");
 | 
			
		||||
        return $@"
 | 
			
		||||
        Receive Data from {data.Address}:{data.Port} at {data.DateTime.ToString()}:
 | 
			
		||||
            Original Data : {BitConverter.ToString(bytes).Replace("-", " ")}
 | 
			
		||||
            Decoded Data  : {recvData} 
 | 
			
		||||
        ";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
@@ -447,7 +465,7 @@ public class UDPServer
 | 
			
		||||
        {
 | 
			
		||||
            foreach (var data in kvp.Value)
 | 
			
		||||
            {
 | 
			
		||||
                logger.Debug(data.ToString());
 | 
			
		||||
                logger.Debug(PrintData(data));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user