Exemple #1
0
 private void Awake()
 {
     Instance = this;
 }
Exemple #2
0
        public bool NeededToSend(string SMSSentFile, string hashStr, bool allowResend, bool cleanLog)
        {
            if (!File.Exists(SMSSentFile))
            {
                return(true);
            }
            List <string> lines      = new List <string>();
            bool          IsNeeded   = true;
            DateTime      baseDT     = new DateTime(2010, 1, 1);
            DateTime      now        = PropMgr.ESTNow;
            double        DelaySecs  = now.AddHours(-25).Subtract(baseDT).TotalSeconds + 2.5 * 3600; // Sent 22.5 hours or less ago to handle daily even with send with clock changes TBD: revise
            double        ResendSecs = allowResend ? DelaySecs : -100;
            double        CleanSecs  = now.AddDays(-14).Subtract(baseDT).TotalSeconds;               // When cleaning, don't save a record of what we already sent 2 or more weeks ago
            int           linesRead  = 0;

            using (StreamReader sr = new StreamReader(SMSSentFile))
            {
                string line;

                while ((line = sr.ReadLine()) != null)
                {
                    ++linesRead;
                    string[] fields = line.Split('~');
                    if ((fields.Length < 2) || (fields[0].Trim().Length == 0))
                    {
                        continue;
                    }
                    var sentSecs = PropMgr.ParseEST(fields[0]).Subtract(baseDT).TotalSeconds;
                    if ((sentSecs >= ResendSecs) && (IsSimilarHash(fields[1], hashStr)))
                    {
                        IsNeeded = false;
                        if (!cleanLog) // Not IsNeeded but keep looping to clean log file
                        {
                            return(false);
                        }
                    }

                    if (cleanLog && (sentSecs > CleanSecs))
                    {
                        lines.Add(line);
                    }
                }
            }
            if (!cleanLog)
            {
                return(true);
            }
            try
            {
                if (linesRead > 0)
                {
                    using (StreamWriter sw = new StreamWriter(SMSSentFile))
                    {
                        foreach (var ln in lines)
                        {
                            sw.WriteLine(ln);
                        }
                    }
                }
            }
            catch
            {
                return(true); // exception : assume needed.
            }
            return(IsNeeded);
        }
Exemple #3
0
    public Dictionary <string, Prop> AllProp;  // 所有道具

    private void Awake()
    {
        instance = this;
        AllProp  = new Dictionary <string, Prop>();
        OwnProp  = new Dictionary <string, Prop>();
    }
Exemple #4
0
        public List <REMail> ReadEMails()
        {
            bool NeedSave = false;

            try
            {
                using (readClient = new Pop3Client())
                {
                    var Server      = "mail.ccaserve.org";
                    var Port        = "110";
                    var UseSsl      = false;
                    var credentials = new NetworkCredential(fromAdr, fromPass);
                    var cancel      = new CancellationTokenSource();
                    var uri         = new Uri(string.Format("pop{0}://{1}:{2}", (UseSsl ? "s" : ""), Server, Port));

                    //Connect to email server
                    readClient.Connect(uri, cancel.Token);
                    readClient.AuthenticationMechanisms.Remove("XOAUTH2");
                    readClient.Authenticate(credentials, cancel.Token);

                    // Read EMails roughly after those we read last
                    var reList          = new List <REMail>();
                    var LatestEMailRead = _settings.LastEMailRead;
                    for (int i = 0; i < readClient.Count; i++)
                    {
                        var msg = readClient.GetMessage(i);

                        // Get Received Date and use it to keep track of emails we have already read and processed.
                        DateTime EMailReceived = default;
                        if (msg.Headers != null)
                        {
                            if (msg.Headers["Received"] != null)
                            {
                                var rval    = msg.Headers["Received"];
                                var rFields = rval.Split(";");
                                foreach (var f in rFields)
                                {
                                    var fld = f.Trim();
                                    if (fld.Length < 45)
                                    {
                                        EMailReceived = CSEMail.ParseDetailedDate(fld);
                                        if (EMailReceived != default)
                                        {
                                            break;
                                        }
                                    }
                                }
                            }
                        }

                        // Get DateTime Originally Sent

                        if ((EMailReceived == default) || (EMailReceived <= LatestEMailRead))
                        {
                            continue; // Either an Admin Delivery failure alert or already read. TBD : Case where multiple emails read the same second but on or more not proccessed.
                        }
                        var re = new REMail(i);
                        re.Subject  = msg.Subject;
                        re.HtmlBody = msg.HtmlBody;
                        re.TextBody = msg.TextBody;
                        var tbFlds = msg.TextBody.Split("\r\n");
                        foreach (var t in tbFlds)
                        {
                            var tfld = t.Trim();
                            if (tfld.StartsWith("Sent:") || tfld.StartsWith("Date:"))
                            {
                                re.Date = CSEMail.ParseDetailedDate(tfld);
                            }
                        }
                        re.From = (msg.Sender != null) ? msg.Sender.ToString() : (((msg.From != null) && (msg.From.Count > 0)) ? msg.From[0].ToString() : "unknown");
                        if (re.Date == default)
                        {
                            re.Date = PropMgr.UTCtoEST(msg.Date.DateTime);
                        }
                        re.Attachments = new List <string>();
                        foreach (var attachment in msg.Attachments)
                        {
                            var fileName = attachment.ContentDisposition?.FileName ?? attachment.ContentType.Name ?? "Att";
                            fileName = re.GetUniqueTempFileName(fileName, true);
                            using (var stream = File.Create(fileName))
                            {
                                if (attachment is MessagePart)
                                {
                                    var part = (MessagePart)attachment;

                                    part.Message.WriteTo(stream);
                                }
                                else
                                {
                                    var part = (MimePart)attachment;

                                    part.Content.DecodeTo(stream);
                                }
                            }
                            re.Attachments.Add(fileName);
                        }

                        // Sometimes images are in BodyParts. filter out other content
                        foreach (var attachment in msg.BodyParts)
                        {
                            var fileName = attachment.ContentDisposition?.FileName ?? attachment.ContentType.Name ?? "";
                            if (string.IsNullOrEmpty(fileName))
                            {
                                continue; // filter out other non-file content
                            }
                            fileName = re.GetUniqueTempFileName(fileName, true);
                            using (var stream = File.Create(fileName))
                            {
                                if (attachment is MessagePart)
                                {
                                    var part = (MessagePart)attachment;

                                    part.Message.WriteTo(stream);
                                }
                                else
                                {
                                    var part = (MimePart)attachment;

                                    part.Content.DecodeTo(stream);
                                }
                            }
                            re.Attachments.Add(fileName);
                        }


                        if (EMailReceived > _settings.LastEMailRead)
                        {
                            NeedSave = true;
                            _settings.LastEMailRead = EMailReceived;
                        }
                        reList.Add(re);
                    }
                    readClient.Disconnect(true);

                    if (NeedSave)
                    {
                        _settings.Save();
                    }

                    return(reList);
                }
            }
            catch (Exception e)
            {
                _ = e;
                return(new List <REMail>()); // TBD Log failure
            }
        }