PBCaGw.Workers.WorkerChain.GatewayTenSecJobs C# (CSharp) Méthode

GatewayTenSecJobs() static private méthode

Cleanup server chains (IOC) which are not used since more than Gateway.IOC_KEEP_ALIVE_CONNECTION
static private GatewayTenSecJobs ( object sender, EventArgs e ) : void
sender object
e System.EventArgs
Résultat void
        static void GatewayTenSecJobs(object sender, EventArgs e)
        {
            nbWaitToExecute--;
            if (nbWaitToExecute > 0)
                return;
            nbWaitToExecute = 3;

            List<WorkerChain> toWakeUp;
            /*lock (lockChainManagement)
            {
                toWakeUp = knownChains.Where(row =>
                    row.Side != ChainSide.DEBUG_PORT &&
                    row[0] is TcpReceiver &&
                    (Gateway.Now - row.LastMessage).TotalSeconds > Gateway.ECHO_INTERVAL).ToList();
            }*/
            toWakeUp = knownChains.Where(row =>
            row.Side != ChainSide.DEBUG_PORT &&
            row[0] is TcpReceiver &&
            (Gateway.Now - row.LastMessage).TotalSeconds > Gateway.ECHO_INTERVAL).ToList();
            foreach (WorkerChain chain in toWakeUp)
            {
                DataPacket newPacket = DataPacket.Create(0, null);
                newPacket.Command = 23;
                if (chain.Side == ChainSide.SERVER_CONN)
                {
                    newPacket.Destination = chain.ServerEndPoint;
                    InfoService.EchoSent[newPacket.Destination] = new Record();
                    if (Log.WillDisplay(System.Diagnostics.TraceEventType.Verbose))
                        Log.TraceEvent(System.Diagnostics.TraceEventType.Verbose, chain.ChainId, "Sending echo to server " + (newPacket.Destination == null ? "" : newPacket.Destination.ToString()));
                    TcpManager.SendIocPacket(null, newPacket);
                }
                else
                {
                    newPacket.Destination = chain.ClientEndPoint;
                    InfoService.EchoSent[newPacket.Destination] = new Record();
                    if (Log.WillDisplay(System.Diagnostics.TraceEventType.Verbose))
                        Log.TraceEvent(System.Diagnostics.TraceEventType.Verbose, chain.ChainId, "Sending echo to client " + (newPacket.Destination == null ? "" : newPacket.Destination.ToString()));
                    TcpManager.SendClientPacket(newPacket);
                }
            }

            toWakeUp = knownChains.Where(row =>
                row.Side != ChainSide.DEBUG_PORT &&
                row[0] is TcpReceiver &&
                (Gateway.Now - row.LastMessage).TotalSeconds > Gateway.ECHO_INTERVAL*2).ToList();
            foreach (WorkerChain chain in toWakeUp)
            {
                chain.Dispose();
            }

            // Cleanup server chains (IOC) which are not used since more than Gateway.IOC_KEEP_ALIVE_CONNECTION
            List<WorkerChain> toDrop;
            /*lock (lockChainManagement)
            {
                toDrop = knownChains
                    .Where(row => row.Side == ChainSide.SERVER_CONN
                        && row.usedBy.Count == 0
                        && row.lastNonUsed != null
                        && (Gateway.Now - row.lastNonUsed.Value).TotalSeconds > Gateway.IOC_KEEP_ALIVE_CONNECTION).ToList();
            }*/
            toDrop = knownChains
            .Where(row => row.Side == ChainSide.SERVER_CONN
            && row.usedBy.Count == 0
            && row.lastNonUsed != null
            && (Gateway.Now - row.lastNonUsed.Value).TotalSeconds > Gateway.IOC_KEEP_ALIVE_CONNECTION).ToList();

            List<string> chainRemoved=new List<string>();
            foreach (WorkerChain chain in toDrop)
            {
                if (chainRemoved.Contains(chain.ServerEndPoint.ToString()))
                    continue;
                chainRemoved.Add(chain.ServerEndPoint.ToString());

                if (Log.WillDisplay(System.Diagnostics.TraceEventType.Stop))
                    Log.TraceEvent(System.Diagnostics.TraceEventType.Stop, chain.chainId, "IOC Chain too old: " + chain.ServerEndPoint);
                TcpManager.DropServerConnection(chain);
                chain.Dispose();
            }

            // Cleanup client chains (MEDM) which didn't send any message for at least 2x KEEP_ALIVE
            /*lock (lockChainManagement)
            {
                toDrop = knownChains
                    .Where(row => row.Side != ChainSide.DEBUG_PORT
                        && row.Side != ChainSide.SERVER_CONN
                        && row[0] is TcpReceiver
                        && (Gateway.Now - row.LastMessage).TotalSeconds > Gateway.ECHO_INTERVAL * 2).ToList();
            }*/
            toDrop = knownChains
            .Where(row => row.Side != ChainSide.DEBUG_PORT
            && row.Side != ChainSide.SERVER_CONN
            && row[0] is TcpReceiver
            && (Gateway.Now - row.LastMessage).TotalSeconds > Gateway.ECHO_INTERVAL * 2).ToList();
            foreach (WorkerChain chain in toDrop)
            {
                if (Log.WillDisplay(System.Diagnostics.TraceEventType.Stop))
                    Log.TraceEvent(System.Diagnostics.TraceEventType.Stop, chain.chainId, "Chain is not talking anymore: " + chain.ClientEndPoint);
                TcpManager.DropClientConnection(chain.ClientEndPoint);
            }
        }