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, ""); } }
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); } } }
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); } } }
protected void SafeLaunchEvent(object sender, DataGram data) { NewDataEvent?.Invoke(sender, data); }