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); }
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); } }
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); }
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); }