private void Awake() { Instance = this; }
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); }
public Dictionary <string, Prop> AllProp; // 所有道具 private void Awake() { instance = this; AllProp = new Dictionary <string, Prop>(); OwnProp = new Dictionary <string, Prop>(); }
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 } }