예제 #1
0
        /// <summary>
        /// Function used in the thread reader xml.
        /// </summary>
        private void FctThreadReaderXml()
        {
            IsRunningMail = true;

            while (IsRunningMail == true)
            {
                try
                {
                    foreach (string file in Global.ConfigValue.XmlPickupFiles)
                    {
                        Global.Log.WriteEvent(LogType.normal, string.Format("[READER:XML] Scanning xml file : {0}", file));

                        if (File.Exists(file))
                        {
                            // deserialize xml task file
                            TextReader    reader    = new StreamReader(file);
                            XmlSerializer serialize = new XmlSerializer(typeof(Tasks));
                            Tasks         tasks     = (Tasks)serialize.Deserialize(reader);
                            reader.Close();

                            DateTime now = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0);

                            for (int i = 0; i < tasks.TasksList.Count; i++)
                            {
                                Task   t        = (Task)tasks.TasksList[i];
                                string fileName = string.Format("{0}?{1}", file, t.Id);

                                if (QueueScheduled.FindInQueue(fileName) == true)
                                {
                                    Global.Log.WriteEvent(LogType.debug, string.Format("[READER:XML] '{0} (id:{1})' already in the scheduled queue, discarding...", file, t.Id));
                                }

                                else
                                {
                                    if (now <= t.DateEnd)
                                    {
                                        DateTime triggerDate = t.GetNextTriggered();
                                        if (triggerDate != DateTime.MinValue)
                                        {
                                            SpooledObject newElement = new SpooledObject(fileName, TypeSpooledObject.scheduledTask, t, triggerDate);
                                            QueueScheduled.AddElement(newElement);
                                            ActiveQLibrary.Form.ManageForm.AddElementTaskQueue(file, string.Format("Task(id:{0})", t.Id));
                                            Global.Log.WriteEvent(LogType.normal, string.Format("[READER:XML] '{0} (id:{1})' added in the scheduled queue...", file, t.Id));
                                        }
                                        else
                                        {
                                            Global.Log.WriteEvent(LogType.debug, string.Format("[READER:XML] '{0} (id:{1})' up to date, discarding...", file, t.Id));
                                        }
                                    }
                                    else
                                    {
                                        Global.Log.WriteEvent(LogType.debug, string.Format("[READER:XML] '{0} (id:{1})' up to date, discarding...", file, t.Id));
                                    }
                                }
                            }
                        }

                        else
                        {
                            Global.Log.WriteError(string.Format("[READER:XML] File : '{0}' doesn't exist, discarding...", file));
                        }
                    }
                }

                catch (ThreadAbortException)
                {
                }

                catch (Exception ex)
                {
                    Global.Log.WriteError("[READER:XML] " + ex.Message);
                    Global.Log.WriteError("[READER:XML] " + ex.StackTrace);

                    Thread.Sleep(500);
                }

                Global.Log.WriteEvent(LogType.normal, string.Format("[READER:XML] Next scan xml in {0} seconds", Global.ConfigValue.Readers.XmlPickup));
                Thread.Sleep(Global.ConfigValue.Readers.XmlPickup * 1000);
            }
        }
예제 #2
0
        /// <summary>
        /// Function used in the thread reader mail
        /// </summary>
        private void FctThreadReaderMail()
        {
            IsRunningMail = true;

            while (IsRunningMail == true)
            {
                //if (Global.ActiveMailAsm == null)
                if (Global.ActiveCommonAsm == null)
                {
                    IsRunningMail = false;
                }

                else
                {
                    try
                    {
                        foreach (string dir in Global.ConfigValue.MailPickupDirectories)
                        {
                            Global.Log.WriteEvent(LogType.normal, string.Format("[READER:MAIL] Scanning mail directory : {0}", dir));

                            DirectoryInfo dirInfo = new DirectoryInfo(dir);
                            // refrash information
                            dirInfo.Refresh();

                            if (Directory.Exists(dir))
                            {
                                FileInfo[] listingFile = dirInfo.GetFiles();

                                foreach (FileInfo file in listingFile)
                                {
                                    string ext = ".EML";

                                    string fileName = dir + @"\" + file.Name;

                                    if (File.Exists(fileName) && file.Length > 4 && file.ToString().Substring(file.ToString().Length - ext.Length).ToUpper() == ext)
                                    {
                                        FileInfo fileInfo = new FileInfo(fileName);
                                        fileInfo.Refresh();

                                        if (fileInfo.Exists)
                                        {
                                            // check the validity of the message
                                            Object message = Activator.CreateInstance(Global.ActiveCommonAsm.GetType("ActiveUp.Net.Mail.Message", true));

                                            bool isMessageValid = true;
                                            try
                                            {
                                                message = Global.ActiveCommonAsm.GetType("ActiveUp.Net.Mail.Parser").GetMethod("ParseMessageFromFile", new Type[] { Type.GetType("System.String") }).Invoke(null, new object[] { fileName });

                                                if (ValidateMailMessage(message) == false)
                                                {
                                                    isMessageValid = false;
                                                }
                                            }
                                            catch (Exception ex)
                                            {
                                                Console.WriteLine(ex);
                                                isMessageValid = false;
                                            }

                                            if (isMessageValid == false)
                                            {
                                                Global.Log.WriteError(string.Format("[READER:MAIL] '{0}' is not a valid mail message or cannot be parsed, moving it to the error directory...", fileName));
                                                Global.MoveFileToError(fileName, "[READER:MAIL]");
                                            }

                                            else
                                            {
                                                /*message.GetType().GetProperty("To").PropertyType.GetMethod("Clear",new Type[] {}).Invoke(message.GetType().GetProperty("To").GetValue(message,null),null);
                                                 * message.GetType().GetProperty("To").PropertyType.GetMethod("Add",new Type[] {Type.GetType("System.String")}).Invoke(message.GetType().GetProperty("To").GetValue(message,null),new Object[] {"*****@*****.**"});
                                                 * message.GetType().GetProperty("Subject").SetValue(message,"ACTIVEMAIL",null);*/

                                                DateTime dateMessage = DateTime.Parse(((System.Collections.Specialized.NameValueCollection)message.GetType().GetProperty("HeaderFields").GetValue(message, null))["date"]);

                                                if (dateMessage <= DateTime.Now)
                                                {
                                                    // message to send immediately
                                                    if (QueueScheduled.FindInQueue(fileName) == true)
                                                    {
                                                        Global.Log.WriteEvent(LogType.debug, string.Format("[READER:MAIL] '{0}' already in the scheduled queue, discarding...", fileName));
                                                    }
                                                    else
                                                    {
                                                        if (QueueStandard.FindInQueue(fileName) == false)
                                                        {
                                                            SpooledObject newElement = new SpooledObject(fileName, TypeSpooledObject.standardMail, message);

                                                            Global.Log.WriteEvent(LogType.normal, string.Format("[READER:MAIL] '{0}' added in the standard queue...", fileName));
                                                            QueueStandard.AddElement(newElement);
                                                            ActiveQLibrary.Form.ManageForm.AddElemStandardQueue(newElement.Name);
                                                        }
                                                        else
                                                        {
                                                            Global.Log.WriteEvent(LogType.debug, string.Format("[READER:MAIL] '{0}' already in the standard queue, discarding...", fileName));
                                                        }
                                                    }
                                                }

                                                else
                                                {
                                                    // message scheduled
                                                    if (QueueScheduled.FindInQueue(fileName) == false)
                                                    {
                                                        SpooledObject newElement = new SpooledObject(fileName, TypeSpooledObject.scheduledMail, message, dateMessage);

                                                        Global.Log.WriteEvent(LogType.normal, string.Format("[READER:MAIL] '{0}' added in the scheduled queue...", fileName));
                                                        QueueScheduled.AddElement(newElement);
                                                        ActiveQLibrary.Form.ManageForm.AddElementScheduledQueue(newElement.Name);
                                                    }
                                                    else
                                                    {
                                                        Global.Log.WriteEvent(LogType.debug, string.Format("[READER:MAIL] '{0}' already in the scheduled queue, discarding...", fileName));
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    else
                                    {
                                        Global.Log.WriteError(string.Format("[READER:MAIL] File '{0}' is not valid or doesn't have .eml extention, it's moved to the error directory...", file.FullName));
                                        Global.MoveFileToError(file.FullName, "[READER:MAIL]");
                                    }
                                }
                            }
                            else
                            {
                                Global.Log.WriteError(string.Format("[READER:MAIL] Directory : '{0}' doesn't exist, discarding...", dir));
                            }
                        }
                    }

                    catch (ThreadAbortException)
                    {
                    }

                    catch (Exception ex)
                    {
                        Global.Log.WriteError("[READER:MAIL] " + ex.Message);
                        Global.Log.WriteError("[READER:MAIL] " + ex.StackTrace);
                        if (ex.InnerException != null)
                        {
                            Global.Log.WriteError("[READER:MAIL] " + ex.InnerException.Message);
                            Global.Log.WriteError("[READER:MAIL] " + ex.InnerException.StackTrace);
                        }
                        Thread.Sleep(500);
                    }

                    Global.Log.WriteEvent(LogType.normal, string.Format("[READER:MAIL] Next scan mail in {0} seconds", Global.ConfigValue.Readers.MailPickUp));
                    Thread.Sleep(Global.ConfigValue.Readers.MailPickUp * 1000);
                }
            }
        }