//------------------------------------------------------------------------------------ /// <summary> /// /// </summary> /// <param name="strXmlFile"></param> /// <param name="contexte"></param> private static CResultAErreur TraiteFichierQowisio(string strXmlFile, CContexteDonnee contexte, EModeTraitment modeTraitement) { CResultAErreur result = CResultAErreur.True; try { XmlDocument fichierXmlQowisio = new XmlDocument(); fichierXmlQowisio.Load(strXmlFile); XmlNode nodeExport = fichierXmlQowisio.SelectSingleNode("export"); if (nodeExport == null) { result.EmpileErreur("<export> node not found in file : " + strXmlFile); return(result); } if ((modeTraitement & EModeTraitment.MEDIUM) == EModeTraitment.MEDIUM) { XmlNode nodeInventory = nodeExport.SelectSingleNode("inventory"); if (nodeInventory != null) { result += TraiteInventaireQowisio(nodeInventory, contexte); if (!result) { C2iEventLog.WriteErreur("CCamusatQowisioDataServeur error in TraiteInventaireQowisio : " + result.MessageErreur); return(result); } } } if ((modeTraitement & EModeTraitment.SHORT) == EModeTraitment.SHORT) { XmlNode nodeData = nodeExport.SelectSingleNode("data"); if (nodeData != null) { result = TraiteDataQowisio(nodeData, contexte); if (!result) { C2iEventLog.WriteErreur("CCamusatQowisioDataServeur error in TraiteDataQowisio : " + result.MessageErreur); } } XmlNode nodeAlarms = nodeExport.SelectSingleNode("alarms"); if (nodeAlarms != null) { result = TraiteAlarmesQowisio(nodeAlarms, contexte); if (!result) { C2iEventLog.WriteErreur("CCamusatQowisioDataServeur error in TraiteAlarmesQowisio : " + result.MessageErreur); } } } result = contexte.SaveAll(true); if (!result) { C2iEventLog.WriteErreur(result.MessageErreur); } } catch (Exception e) { string strErreur = "CCamusatQowisioDataServeur error in TraiteFichierQowisio : " + e.Message; C2iEventLog.WriteErreur(strErreur); result.EmpileErreur(strErreur); Console.WriteLine(strErreur); return(result); } finally { } return(result); }
//---------------------------------------------------------------------------------- /// <summary> /// /// </summary> /// <param name="target"></param> public static void OnTimerTraitement(object target) { CResultAErreur result = CResultAErreur.True; TimeSpan ts = DateTime.Now - m_lastDateDebutTraitementShort; if (m_bTraitementEnCours) { if (ts.TotalMinutes < 5) { return; } else { C2iEventLog.WriteErreur("CCamusatQowisioDataServeur : data processing >= 5 minutes"); return; } } m_bTraitementEnCours = true; m_lastDateDebutTraitementShort = DateTime.Now; // Determine le mode du traitement SHORT/MEDIUM/FULL EModeTraitment modeTraitement = EModeTraitment.SHORT; ts = DateTime.Now - m_lastDateDebutTraitementMedium; if (ts.TotalMilliseconds >= c_nDelaiTraitementMedium) { modeTraitement = modeTraitement | EModeTraitment.MEDIUM; m_lastDateDebutTraitementMedium = DateTime.Now; } ts = DateTime.Now - m_lastDateDebutTraitementMedium; if (ts.TotalMilliseconds >= c_nDelaiTraitementFull) { modeTraitement = modeTraitement | EModeTraitment.FULL; m_lastDateDebutTraitementFull = DateTime.Now; } try { System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Lowest; try { m_sessionClient = CSessionClient.CreateInstance(); result = m_sessionClient.OpenSession(new CAuthentificationSessionServer(), "Qowisio XML data processing", ETypeApplicationCliente.Service); if (!result) { C2iEventLog.WriteErreur("Working session openning error for CCamusatQowisioDataServeur"); return; } try { //Récupère les fichiers FTP string strFTPserver = CCamusatQowisioServeurRegistre.FTPServer; string strFTPuser = CCamusatQowisioServeurRegistre.FTPUser; string strFTPpassword = CCamusatQowisioServeurRegistre.FTPPassword; int nFTPport = CCamusatQowisioServeurRegistre.FTPPort; string strIncomingDirectory = CCamusatQowisioServeurRegistre.FTPIncomingDirectory; List <string> listeFichiersATraiter = new List <string>(); ArrayList listFiles = null; string strLastFile = new CDataBaseRegistrePourClient(m_sessionClient.IdSession).GetValeurString(c_strCleDernierFichierTraité, ""); Sftp ftp = new Sftp(strFTPserver, strFTPuser, strFTPpassword); try { ftp.Connect(); /* Open the FTP connection */ listFiles = ftp.GetFileList(strIncomingDirectory); listFiles.Sort(); listFiles.Reverse(); /* * // constitue la liste des fichiers à traiter * listFiles.AddRange(ftp.GetFiles()); * listFiles.Sort(new CFtpFileInfoComparer()); * listFiles.Reverse();*/ foreach (string strFtpFile in listFiles) { if (strFtpFile.CompareTo(strLastFile) <= 0) { break; } string strWorkFile = WorkDir + "\\" + strFtpFile; if (strFtpFile.ToUpper().EndsWith("XML")) { if (!File.Exists(strWorkFile)) { ftp.Get(strIncomingDirectory + "/" + strFtpFile, strWorkFile); //ftp.GetFile(fileInfo.Name, strWorkFile, false); /* download /incoming/file.txt as file.txt to current executing directory, overwrite if it exists */ //ftp.RemoveFile(fileInfo.Name); } listeFichiersATraiter.Insert(0, strFtpFile); } } if (listeFichiersATraiter.Count > 0) { new CDataBaseRegistrePourClient(m_sessionClient.IdSession).SetValeur(c_strCleDernierFichierTraité, listeFichiersATraiter[listeFichiersATraiter.Count - 1]); } ftp.Close(); } catch (Exception ex) { C2iEventLog.WriteErreur("CCamusatQowisioDataServeur error openning FTP connection: " + ex.Message); } finally { ftp.Close(); } // Traite la liste des fichiers à traiter using (CContexteDonnee contexte = new CContexteDonnee(m_sessionClient.IdSession, true, false)) { List <string> lstFichiersWork = new List <string>(Directory.GetFiles(WorkDir, "*.xml")); lstFichiersWork.Sort(); //CCamusatQowisioDataServeur serveur = new CCamusatQowisioDataServeur(m_sessionClient.IdSession); foreach (string strWorkFile in lstFichiersWork) { try { string strNomFichier = Path.GetFileName(strWorkFile); // Traitement d'un fichier XML result = TraiteFichierQowisio(strWorkFile, contexte, modeTraitement); string strArchive = DoneDir + "\\" + strNomFichier; if (result) { MoveSafely(strWorkFile, ref strArchive); } else { strArchive = ErrorDir + "\\" + strNomFichier; MoveSafely(strWorkFile, ref strArchive); FileStream stream = new FileStream(strArchive + ".Err", FileMode.CreateNew, FileAccess.Write); StreamWriter writer = new StreamWriter(stream); writer.Write(result.MessageErreur); writer.Close(); stream.Close(); } } catch (Exception e) { C2iEventLog.WriteErreur("CCamusatQowisioDataServeur error while processing file : " + strWorkFile + " - " + e.Message); } } } } catch (Exception ex) { C2iEventLog.WriteErreur("CCamusatQowisioDataServeur error processing files : " + ex.Message); } finally { try { m_sessionClient.CloseSession(); } catch { } } } catch (Exception e) { C2iEventLog.WriteErreur("CCamusatQowisioDataServeur error in OnTimerTraitement : " + e.Message); } } catch (Exception ex) { C2iEventLog.WriteErreur("CCamusatQowisioDataServeur error in OnTimerTraitement : " + ex.Message); } finally { m_bTraitementEnCours = false; } }