public void FlushReceivedData() { lock (handler) while (udpReceivedData.Count > 0) { UdpReceivedData receivedData = udpReceivedData.Dequeue(); if (dataReceiver != null) { dataReceiver.ReceiveData(receivedData.data, receivedData.ipEndPoint); } } }
void OnReceive(IAsyncResult asyncResult) { try { UdpReceivedData receivedData = new UdpReceivedData(); receivedData.data = connection.EndReceive(asyncResult, ref receivedData.ipEndPoint); lock (handler) udpReceivedData.Enqueue(receivedData); } catch (SocketException e) { UnityEngine.Debug.LogError("UdpConnection Error: " + e.Message); } connection.BeginReceive(OnReceive, null); }
public void PacketArrived(UdpService.UdpServer US) { string ServiceId = US.ServiceID; ConcurrentQueue <UdpReceivedData> Qurd = US.UQ.Qurd; List <UdpSocket> Us = US.Us; ConcurrentQueue <UdpSendData> Qusd = US.UQ.Qusd; while (Qurd.Count > 0) { UdpReceivedData urd = null; Qurd.TryDequeue(out urd); if (urd != null) { try { //注册&透传 Service.ServiceBussiness.RemoteCommand(urd.Data); //Service.ServiceBussiness.Registered30(urd.Data); //ASCII To String string STR = Encoding.ASCII.GetString(urd.Data); List <string> list = pd.SubPackage(STR); if (list.Count > 0) { bool PkV = true; foreach (var item in list) { PkV = pd.PacketValidate(item); if (PkV) { string STCD = pd.GetCode(item); InsertNewSTCD(STCD, Service.ServiceEnum.NFOINDEX.UDP, US); bool B = false; //更新socket列表的stcd、socket UdpBussiness.UpdSocket(US, urd.IpEndPoint, STCD, out B); if (!B) { //上线 UdpBussiness.UdpConnected(US, STCD); } //通知界面 ServiceBussiness.WriteQUIM("UDP", ServiceId, STCD, "接收数据", urd.Data, Service.ServiceEnum.EnCoderType.ASCII, Service.ServiceEnum.DataType.Text); PacketArrived(item, ServiceEnum.NFOINDEX.UDP, US); } } } else { ServiceBussiness.WriteQUIM("UDP", ServiceId, "", "接收异常数据", urd.Data, Service.ServiceEnum.EnCoderType.ASCII, Service.ServiceEnum.DataType.Text); } } catch (Exception ex) { //通知界面 ServiceBussiness.WriteQUIM("UDP", ServiceId, "", "接收异常数据", urd.Data, Service.ServiceEnum.EnCoderType.ASCII, Service.ServiceEnum.DataType.Text); log.Error(DateTime.Now + "包处理操作异常" + ex.ToString()); } } } }