/// <summary> /// 获取数据传输器实例 /// </summary> /// <param name="_uid"></param> /// <param name="_type"></param> /// <param name="_data"></param> /// <returns></returns> public static DataTransfer GetInstance(string _uid, string _type, params Fields[] _data) { DataTransfer transfer = new DataTransfer(); transfer.uid = _uid; transfer.type = _type; transfer.FieldsJoining(_data); return(transfer); }
void SendFunc() { Sendclient = new UdpClient(); //发送信息的端口一定要和接受的端口号一样 SendPort = new IPEndPoint(groupAddress, tport); while (true) { //判断侦听器注册数量 if (DiscoveryLogServer.Count == 0) { ManagerLog("未设置侦听器,无法分拣消息"); //LogFile("UDPManager", "未设置侦听器,无法分拣消息"); continue; } try { Queue <DataTransfer> datas = new Queue <DataTransfer>(); List <string> HandleKeys = new List <string>(DiscoveryLogServer.Keys); foreach (string key in HandleKeys)//构建消息队列 { List <UDPHandle> tHandle = DiscoveryLogServer[key]; if (tHandle == null || tHandle.Count == 0) { //Handle类别为空 continue; } DataTransfer transfer = DataTransfer.GetInstance(ID, tHandle[0].HandleType); tHandle.ForEach(delegate(UDPHandle cHandle) { Fields[] tField = cHandle.OnSendData(); if (tField == null || tField.Length == 0) { return; } for (int i = 0; i < tField.Length; i++) { tField[i].name = cHandle.HandleName; } transfer.FieldsJoining(tField); }); if (transfer.data.Count != 0) { datas.Enqueue(transfer); dataCollections = transfer.ToString(); } /* * Fields[] tField = tHandle.OnSendData(); * if(tField == null || tField.Length == 0) { continue; } * DataTransfer transfer = DataTransfer.GetInstance(ID, tHandle.HandleType(), tField); * datas.Enqueue(transfer); */ } if (datas.Count > 0) { while (datas.Count > 0) { DataTransfer SendingData = datas.Dequeue();//前面已经确保了DataTransfer不为空 try { string json = Newtonsoft.Json.JsonConvert.SerializeObject(SendingData); byte[] bufs = Encoding.UTF8.GetBytes(json); Sendclient.Send(bufs, bufs.Length, SendPort); } catch (Exception e) { DiscoveryLogServer[SendingData.type].ForEach(handle => handle.Log(e.ToString())); } } } else { //ManagerLog("空转"); Thread.Sleep(sendMillSec); } }catch (Exception e) { ManagerLog(e.ToString()); } } }