/// <summary> /// 接收到流量数据事件函数 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FlowReceivedHandler(object sender, WebSocketReceivedEventArges e) { string json = Encoding.UTF8.GetString(e.Packet.ToArray()); if (_clients.TryGetValue(e.Uri.Authority, out Item item)) { try { var v = JsonConvert.DeserializeObject <FlowAdapterData>(json); foreach (LaneAdapterData laneData in v.Data) { LaneFlow laneFlow = new LaneFlow { DataId = $"{laneData.ChannelId}_{laneData.LaneId}", DateTime = laneData.DateTime, Bikes = laneData.Bikes, Tricycles = laneData.Tricycles, Persons = laneData.Persons, Cars = laneData.Cars, Motorcycles = laneData.Motorcycles, Buss = laneData.Buss, Trucks = laneData.Trucks, Vans = laneData.Vans, AverageSpeedData = laneData.AverageSpeed, HeadDistance = laneData.HeadDistance, TimeOccupancy = laneData.TimeOccupancy, Occupancy = laneData.Occupancy, TrafficStatus = laneData.TrafficStatus, Count = 1 }; item.FlowSuccess += 1; _flowBranchBlock.Post(laneFlow); } } catch (Exception ex) { item.FlowFailed += 1; _logger.LogError((int)LogEvent.数据适配, ex, "流量数据解析异常"); } } else { _logger.LogWarning((int)LogEvent.数据适配, $"未知的数据项 {e.Uri.Authority}"); } }
/// <summary> /// 接收数据处理函数 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ReceiveHandler(object sender, WebSocketReceivedEventArges e) { string json = Encoding.UTF8.GetString(e.Packet.ToArray()); if (_clients.TryGetValue(e.Uri.Authority, out Item item)) { try { var v = JsonConvert.DeserializeObject <DensityAdapterData>(json); if (v.type == "car_count") { _densityBranchBlock.Post(new TrafficDensity { MatchId = $"{e.Uri.Host}_{v.data.channel_id}_{v.data.region_id}", DateTime = DateTime.ParseExact(v.data.record_time, "yyyyMMddHHmmss", CultureInfo.CurrentCulture), Value = v.data.count }); item.DensitySuccess += 1; } else if (v.type == "crowd_data") { _eventBranchBlock.Post(new TrafficEvent { MatchId = $"{e.Uri.Host}_{v.data.channel_id}_{v.data.region_id}", DateTime = DateTime.ParseExact(v.data.record_time, "yyyyMMddHHmmss", CultureInfo.CurrentCulture) }); item.EventSuccess += 1; } } catch (Exception ex) { item.Failed += 1; _logger.LogError((int)LogEvent.数据适配, ex, "密度数据解析异常"); } } else { _logger.LogWarning((int)LogEvent.数据适配, $"未知的数据项 {e.Uri.Authority}"); } }
/// <summary> /// 接收到视频结构化数据事件函数 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void VideoReceivedHandler(object sender, WebSocketReceivedEventArges e) { string json = Encoding.UTF8.GetString(e.Packet.ToArray()); if (_clients.TryGetValue(e.Uri.Authority, out Item item)) { try { var data = JsonConvert.DeserializeObject <VideoStructAdapterData>(json); if (data.VideoStructType == VideoStructType.机动车) { VideoVehicle videoVehicle = new VideoVehicle { DataId = $"{data.ChannelId}_{ data.LaneId}", DateTime = data.DateTime, Image = string.IsNullOrEmpty(data.Image) ? string.Empty : data.Image, Feature = string.IsNullOrEmpty(data.Feature) ? string.Empty : data.Feature, CountIndex = data.CountIndex, CarBrand = string.IsNullOrEmpty(data.CarBrand) ? string.Empty : data.CarBrand, //为避免出现0 CarType = data.CarType + 1, CarColor = data.CarColor, PlateType = data.PlateType, PlateNumber = string.IsNullOrEmpty(data.PlateNumber) ? string.Empty : data.PlateNumber }; item.VideoSuccess += 1; _videoBranchBlock.Post(videoVehicle); } else if (data.VideoStructType == VideoStructType.非机动车) { VideoBike videoBike = new VideoBike { DataId = $"{data.ChannelId}_{ data.LaneId}", DateTime = data.DateTime, Image = data.Image, Feature = data.Feature, CountIndex = data.CountIndex, BikeType = data.BikeType }; item.VideoSuccess += 1; _videoBranchBlock.Post(videoBike); } else if (data.VideoStructType == VideoStructType.行人) { VideoPedestrain videoPedestrain = new VideoPedestrain { DataId = $"{data.ChannelId}_{ data.LaneId}", DateTime = data.DateTime, Image = data.Image, Feature = data.Feature, CountIndex = data.CountIndex, Age = data.Age, Sex = data.Sex, UpperColor = data.UpperColor }; item.VideoSuccess += 1; _videoBranchBlock.Post(videoPedestrain); } } catch (Exception ex) { item.VideoFailed += 1; _logger.LogError((int)LogEvent.数据适配, ex, "视频结构化数据解析异常"); } } else { _logger.LogWarning((int)LogEvent.数据适配, $"未知的数据项 {e.Uri.Authority}"); } }