SIPSorcery.Servers.SIPRegistrarBindingsManager.SendNATKeepAlives C# (CSharp) Метод

SendNATKeepAlives() приватный Метод

private SendNATKeepAlives ( ) : void
Результат void
        private void SendNATKeepAlives()
        {
            try
            {
                Thread.CurrentThread.Name = SEND_KEEPALIVES_THREAD_NAME;

                while (!m_stop)
                {
                    try
                    {
                        //List<NATKeepAliveJob> m_jobsList = m_natKeepAliveJobs.Values.ToList();
                        List<string> jobsToRemove = new List<string>();

                        DateTime natKeepAliveStart = DateTime.Now;
                        int natKeepAliveCount = 0;

                        // Send NAT keep-alives.
                        //for (int index = 0; index < m_jobsList.Count; index++) {
                        m_natKeepAliveJobs.Values.ToList().ForEach((job) =>
                        {
                            //NATKeepAliveJob job = m_jobsList[index];
                            try
                            {
                                if (job.EndTime < DateTime.Now || job.Cancel)
                                {
                                    if (!jobsToRemove.Contains(job.RemoteEndPoint.ToString()))
                                    {
                                        logger.Debug("Removing NAT keep-alive job for binding socket " + job.RemoteEndPoint.ToString() + ".");
                                        jobsToRemove.Add(job.RemoteEndPoint.ToString());
                                    }
                                }
                                else if (job.NextSendTime == null || job.NextSendTime < DateTime.Now)
                                {
                                    SendNATKeepAlive_External(new NATKeepAliveMessage(job.ProxyEndPoint, job.RemoteEndPoint.GetIPEndPoint()));
                                    job.NextSendTime = DateTime.Now.AddSeconds(NATKEEPALIVE_DEFAULTSEND_INTERVAL);
                                    //logger.Debug("Requesting NAT keep-alive from proxy socket " + job.ProxyEndPoint.ToString() + " to " + job.RemoteEndPoint + ", owner=" + job.Owner + ".");
                                    FireSIPMonitorLogEvent(new SIPMonitorConsoleEvent(SIPMonitorServerTypesEnum.NATKeepAlive, SIPMonitorEventTypesEnum.NATKeepAlive, "Requesting NAT keep-alive from proxy socket " + job.ProxyEndPoint + " to " + job.RemoteEndPoint + ".", job.Owner));
                                    //if (m_natKeepAliveJobs.ContainsKey(job.RemoteEndPoint.ToString()))
                                    //{
                                    //    m_natKeepAliveJobs[job.BindingId] = job;
                                    //}
                                    natKeepAliveCount++;
                                }
                            }
                            catch (Exception natJobExcp)
                            {
                                logger.Error("Exception attempting NAT keep-alive send for " + job.RemoteEndPoint + ", owner=" + job.Owner + ". " + natJobExcp.Message);
                                if (!jobsToRemove.Contains(job.RemoteEndPoint.ToString()))
                                {
                                    jobsToRemove.Add(job.RemoteEndPoint.ToString());
                                }
                            }
                        });

                        // Remove any flagged jobs.
                        foreach (string removeJob in jobsToRemove)
                        {
                            m_natKeepAliveJobs.Remove(removeJob);
                        }

                        //logger.Debug(natKeepAliveCount + " NAT keep-alives sent, time taken " + DateTime.Now.Subtract(natKeepAliveStart).TotalMilliseconds.ToString("0") + "ms.");
                        //FireSIPMonitorLogEvent(new SIPMonitorConsoleEvent(SIPMonitorServerTypesEnum.Registrar, SIPMonitorEventTypesEnum.Timing, "NATKeepAlive run took " + DateTime.Now.Subtract(natKeepAliveStart).TotalMilliseconds.ToString("0") + "ms.", null));
                    }
                    catch (Exception sendExcp)
                    {
                        logger.Error("Exception SendNATKeepAlives Send. " + sendExcp.Message);
                    }

                    Thread.Sleep(SEND_NATKEEPALIVES_INTERVAL);
                }
            }
            catch (Exception excp)
            {
                logger.Error("Exception SendNATKeepAlives. " + excp.Message);
            }
        }