예제 #1
0
        public Task Generazione_Task_JOBS(AS400Server srv, List <JOB> ls_jobs, Persistence p, AS400 s)
        {
            ev.WriteEventToMyLog(Source + " - Taks Jobs", "Avvio Task Jobs per " + srv.ServerName, EventLogEntryType.Information, 4);

            try
            {
                ls_jobs = Read_Job_Monitored();// carico dalla tabella i job da monitorare tutti i giri
            }
            catch (Exception ex)
            {
                ev.WriteEventToMyLog(Source + " - Taks Jobs", "Errore: " + ex.Message, EventLogEntryType.Error, 44);
            }

            // srv.cTokenSource.Cancel();// per sicurezza lo cancello nel caso non fosse già cancellato
            srv.cTokenSource = new CancellationTokenSource(TimeoutToken);
            var cToken = srv.cTokenSource.Token;              // quando non si vuole specificare il tipo per comodità si mette var

            cToken.Register(() => cancelNotification_JOBS()); // gestione cancellazione notifica


            // creo il task del controllo jobs e gli passo i par di connessione più il token di eventuale cancellazione
            Task taskJobs = Task <int> .Factory.StartNew(() => os400.JOBLIST(cToken, srv.ServerName, srv.userid, srv.password, ls_jobs, p, s), cToken);

            return(taskJobs);
        }
예제 #2
0
 private AS400 Connessione_AS400(AS400Server s)
 {
     try
     {
         AS400 server = new AS400();
         server.setSystemName(s.ServerName);
         server.setUserId(s.userid);     //utente con diritti *ALLOBJ
         server.setPassword(s.password);
         return(server);
     }
     catch (Exception ex)
     {
         return(null);
     }
 }
예제 #3
0
        private int Start_OS400(CancellationToken ct_main, Persistence p, AS400 srv, AS400Server s)
        {
            while (true)                                            // loop infinito
            {
                Task t = Generazione_Task_JOBS(s, ls_jobs, p, srv); // questo ha un timeout
                t.Wait();

                Thread.Sleep(30 * 1000);

                if (ct_main.IsCancellationRequested)
                {
                    break;
                }                                              // se lancio una richiesta di cancellazione manuale esco dal while
            }
            return(0);
        }
예제 #4
0
        private Boolean Ping_OS400(CancellationToken ct, AS400Server srv)
        {
            PingCls ping = new PingCls();

            while (true)
            {
                #region LOGICA DEL PING

                if (ping.isAvailable(srv.ServerName))
                {
                    ev.WriteEventToMyLog(Source + " - PING", "ping a " + srv.ServerName + " OK!", EventLogEntryType.Warning, 888);
                    Boolean isStop = srv.cTokenSource.IsCancellationRequested;

                    if (isStop)
                    {
                        srv.cTokenSource.Cancel();// per sicurezza lo spengo e ne genero un altro altrimenti ne crea di multipli

                        var ct_main = ctsource_main.Token;
                        ct_main.Register(() => cancelNotification_Main());// gestione cancellazione notifica
                        AS400       server = Connessione_AS400(srv);
                        Persistence p      = new Persistence {
                            ServerName = srv.ServerName, jobs = new List <JobDetails> {
                            }
                        };                                                                                          // persistenza dei job in errore
                        Task t = Task <int> .Factory.StartNew(() => Start_OS400(ct_main, p, server, srv), ct_main); // lancio il controllo Os400 come task
                    }
                }
                else
                {
                    ev.WriteEventToMyLog(Source + " - PING", "Ping per " + srv.ServerName + " Fallito!", EventLogEntryType.Error, 999);
                    srv.cTokenSource.Cancel();// spengo il monitor del server
                }
                #endregion

                Thread.Sleep(20 * 1000);// aspetto 10 secondi e pingo ancora

                if (ct.IsCancellationRequested)
                {
                    break;
                }                                         // se lancio una richiesta di cancellazione manuale esco dal while
            }

            return(true);
        }