コード例 #1
0
ファイル: UdpSocket.cs プロジェクト: agluque62/sacta-proxy
        void ReceiveCallback(IAsyncResult ar)
        {
            try
            {
                DataGram   dg          = new DataGram();
                IPEndPoint client      = new IPEndPoint(IPAddress.Any, 0);
                bool       processData = false;
                if (_Udp != null /*&& _Udp.Available > 0*/)
                {
                    dg.Data   = _Udp.EndReceive(ar, ref client);
                    dg.Client = client;
                    SafeLaunchEvent(this, dg);

                    lock (_Datagrams)
                    {
                        while (_Udp.Available > 0)
                        {
                            DataGram dgToEnqueue = new DataGram();
                            client = new IPEndPoint(IPAddress.Any, 0);

                            dgToEnqueue.Data   = _Udp.Receive(ref client);
                            dgToEnqueue.Client = client;

                            _Datagrams.Enqueue(dgToEnqueue);
                        }

                        if (_NumRecevieThreads < _MaxReceiveThreads)
                        {
                            processData = true;
                            _NumRecevieThreads++;
                        }
                    }

                    _Udp.BeginReceive(ReceiveCallback, null);
                    while (processData)
                    {
                        lock (_Datagrams)
                        {
                            if ((_Datagrams.Count > 0) && (_NumRecevieThreads <= _MaxReceiveThreads))
                            {
                                dg = _Datagrams.Dequeue();
                                SafeLaunchEvent(this, dg);
                            }
                            else
                            {
                                _NumRecevieThreads--;
                                processData = false;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                //Logger.Exception<UdpSocket>(ex);
                LogManager.GetLogger("UdpSocket").Error(ex, "");
            }
        }
コード例 #2
0
        void ReceiveCallback(IAsyncResult ar)
        {
            try
            {
                DataGram   dg          = new DataGram();
                IPEndPoint client      = new IPEndPoint(IPAddress.Any, 0);
                bool       processData = false;

                dg.Data   = _Udp.EndReceive(ar, ref client);
                dg.Client = client;

                _Logger.Trace("Received data from {0}:\n{1}", client, new BinToLogString(dg.Data));

                lock (_Datagrams)
                {
                    while (_Udp.Available > 0)
                    {
                        DataGram dgToEnqueue = new DataGram();
                        client = new IPEndPoint(IPAddress.Any, 0);

                        dgToEnqueue.Data   = _Udp.Receive(ref client);
                        dgToEnqueue.Client = client;

                        _Datagrams.Enqueue(dgToEnqueue);
                    }

                    if (_NumRecevieThreads < _MaxReceiveThreads)
                    {
                        processData = true;
                        _NumRecevieThreads++;
                    }
                }

                _Udp.BeginReceive(ReceiveCallback, null);

                while (processData)
                {
                    General.SafeLaunchEvent(NewDataEvent, this, dg);

                    lock (_Datagrams)
                    {
                        if ((_Datagrams.Count > 0) && (_NumRecevieThreads <= _MaxReceiveThreads))
                        {
                            dg = _Datagrams.Dequeue();
                        }
                        else
                        {
                            _NumRecevieThreads--;
                            processData = false;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                if (!_Disposed)
                {
                    _Logger.FatalException("ERROR receiving data", ex);
                }
            }
        }
コード例 #3
0
ファイル: UdpSocket.cs プロジェクト: agluque62/sacta-proxy
        void ReceiveCallback(IAsyncResult ar)
        {
            try
            {
                DataGram   dg          = new DataGram();
                IPEndPoint client      = new IPEndPoint(IPAddress.Any, 0);
                bool       processData = false;

                dg.Data   = _Udp.EndReceive(ar, ref client);
                dg.Client = client;

                /** 20170119. INCI-ASPAS. Este paquete hay que lanzarlo si o si*/
                General.SafeLaunchEvent(NewDataEvent, this, dg);
                /*******************************************************/

                // _Logger.Trace("Received data from {0}:{1}{2}", client, Environment.NewLine, new BinToLogString(dg.Data));

                lock (_Datagrams)
                {
                    while (_Udp.Available > 0)
                    {
                        DataGram dgToEnqueue = new DataGram();
                        client = new IPEndPoint(IPAddress.Any, 0);

                        dgToEnqueue.Data   = _Udp.Receive(ref client);
                        dgToEnqueue.Client = client;

                        _Datagrams.Enqueue(dgToEnqueue);
                    }

                    if (_NumRecevieThreads < _MaxReceiveThreads)
                    {
                        processData = true;
                        _NumRecevieThreads++;
                    }
                }

                _Udp.BeginReceive(ReceiveCallback, null);

                /** AGL.2017. */
                //lock (_Datagrams)
                //{
                //    if (/*_Datagrams.Count > 0 && */processData == false)
                //    {
                //        LogManager.GetCurrentClassLogger().Error("UdpSocket: ERROR. Datagrama Perdido. _DCount={2}, _TNum={0}, _TMax={1}",
                //            _NumRecevieThreads, _MaxReceiveThreads, _Datagrams.Count);
                //    }
                //}

                while (processData)
                {
                    /** 20170119. INCI-ASPAS. */
                    // General.SafeLaunchEvent(NewDataEvent, this, dg);

                    lock (_Datagrams)
                    {
                        if ((_Datagrams.Count > 0) && (_NumRecevieThreads <= _MaxReceiveThreads))
                        {
                            dg = _Datagrams.Dequeue();
                            /** 20170119. INCI-ASPAS. Una vez se desencola, hay que lanzarlo */
                            General.SafeLaunchEvent(NewDataEvent, this, dg);
                            /*******************************************************/
                        }
                        else
                        {
                            _NumRecevieThreads--;
                            processData = false;
                        }
                    }
                }
            }
            catch (Exception)
            {
                if (!_Disposed)
                {
                    // _Logger.FatalException("ERROR receiving data", ex);
                    // LogManager.GetCurrentClassLogger().Error("UdpSocket: ERROR receiving data: {0}", ex.Message);
                }
            }
        }
コード例 #4
0
ファイル: UdpSocket.cs プロジェクト: agluque62/sacta-proxy
 protected void SafeLaunchEvent(object sender, DataGram data)
 {
     NewDataEvent?.Invoke(sender, data);
 }