예제 #1
0
        void udp_OnReceivedData(object sender, UdpService.ReceivedDataEventArgs e)
        {
            try
            {
                UdpServer udp = sender as UdpServer;
                //添加入连接列表
                //UdpBussiness.AddSocket(udp, e.ClientSocket);

                //写入接收数据队列
                UdpBussiness.WriteUrdQ(udp, e.ClientSocket, e.RevData);

                //写入透明传输的数据报列表
                ServiceBussiness.WriteQDM(e.RevData);
                //写入日志
                LogInfoToTxt(ServiceEnum.NFOINDEX.UDP, e.ClientSocket.Address + ":" + e.ClientSocket.Port, e.RevData);

                //写入待发送至界面的数据处理列表(透明传输代替)
                //ServiceBussiness.WriteQRDM(udp.ServiceID, e.RevData);

                //解析数据包
                UdpBussiness.ResolvePacket(udp);
            }
            catch (Exception ex)
            {
                log.Error(DateTime.Now + "接收处理操作异常" + ex.ToString());
            }
        }
예제 #2
0
        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());
                    }
                }
            }
        }