using com.hnshituo.core.webapp.vo; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.NetworkInformation; using System.Text; using System.Threading; using System.Threading.Tasks; namespace RailLocalMeter { public class PingNetwork { Log lg = Log.GetInstance(); private bool blThreadFlag = true; Thread DataCollectThread = null;//采集进程 string dbFile = Path.Combine(AppConfigCache.path, "data/rfidDb.data"); MeterBaseRfidInfoService rfidServer = new MeterBaseRfidInfoService(); public PingNetwork() { DataCollectThread = new Thread(new ThreadStart(DataCollect)); } public void start() { DataCollectThread.Start(); } public void stop() { blThreadFlag = false; } private void DataCollect() { if (!blThreadFlag) return; while (blThreadFlag) { try { Ping pingSend = new Ping(); PingReply reply = pingSend.Send(AppConfigCache.ServiceIp, 1000); if (reply.Status == IPStatus.Success) CacleCls.serverFlag = true; else CacleCls.serverFlag = false; } catch (Exception) { CacleCls.serverFlag = false; } finally { if (CacleCls.serverFlag) { if (CacleCls.weight < 500 && DateTime.Now > CacleCls.updateRfidInfoTime) { CacleCls.updateRfidInfoTime.Value.AddHours(1); //每隔一小时更新一次rfid数据 Dictionary rfidInfo = new Dictionary(); RESTfulResult> rfids = rfidServer.doQueryRfid(new MeterBaseRfidInfo { valueFlag = "0" }); if (rfids.Succeed) { if (rfids.Data != null && rfids.Data.Count > 0) { StringBuilder sb = new StringBuilder(); foreach (MeterBaseRfidInfo rfid in rfids.Data) { try { sb.AppendLine($"{rfid.rfidCode},{rfid.carNo}"); rfidInfo.Add(rfid.rfidCode, rfid.carNo); } catch { } } try { //如果目标文件存在则覆盖,不存在则创建 File.WriteAllText(dbFile, sb.ToString()); } catch (Exception ex) { lg.WriteLog(LogType.SystemLog, "写入rfid数据到本地失败:" + ex.Message); } CacleCls.rifdInfo = rfidInfo; } } else { lg.WriteLog(LogType.serverLog, $"获取RFID信息失败:{rfids.Message}"); } } } else { if (CacleCls.rifdInfo == null || CacleCls.rifdInfo.Count == 0) { //读取本地rfid数据文件 try { if (File.Exists(dbFile)) { Dictionary rfidInfo = new Dictionary(); string[] strs = File.ReadAllLines(dbFile); foreach (string str in strs) { try { string[] strInfo = str.Split(','); if (strInfo.Length == 2) { rfidInfo.Add(strInfo[0], strInfo[1]); } } catch { } } CacleCls.rifdInfo = rfidInfo; } } catch (Exception ex) { lg.WriteLog(LogType.WriteDbLog, "写入信息失败:" + ex.Message); } } } Thread.Sleep(1000); //1秒ping一次网络 } } } } }