public void AddMail(Mail item) { //HELPERS int attachments = 0; int pos = this.data.Length; Array.Resize(ref this.data, this.data.Length + 131); string timestamp = String.Format(CultureInfo.InvariantCulture, "{0}-{1}-{2} {3}:{4}:{5}", item.Time.Day, item.Time.Month, item.Time.Year, item.Time.Hour, item.Time.Minute, item.Time.Second); if (item.Zeny > 0) { attachments |= 1; } if (item.Attachment != null) { attachments |= 2; Array.Copy(BitConverter.GetBytes(item.Attachment.info.item), 0, this.data, pos + 5, 4); this.data[pos + 9] = (byte)item.Attachment.count; } Array.Copy(BitConverter.GetBytes(item.MailId), 0, this.data, pos, 4); this.data[pos + 4] = (byte)attachments; Encoding.Unicode.GetBytes(item.Sender, 0, Math.Min(item.Sender.Length, 16), this.data, pos + 13); Encoding.Unicode.GetBytes(timestamp, 0, Math.Min(timestamp.Length, 19), this.data, pos + 45); this.data[pos + 87] = item.Valid; Encoding.Unicode.GetBytes(item.Topic, 0, Math.Min(item.Topic.Length, 19), this.data, pos + 88); this.data[pos + 130] = item.IsRead; this.Count++; }
/// <Sql> /// SELECT /// * /// FROM /// list_maildata /// WHERE /// Sender=?Sender /// AND /// IsOutbox=1; /// </Sql> public IEnumerable<Mail> GetOutboxMail(Character target) { MySqlConnection connection = ConnectionPool.Request(); MySqlCommand command = new MySqlCommand(_query_37, connection); command.Parameters.AddWithValue("Sender", target.Name); MySqlDataReader reader = null; try { reader = command.ExecuteReader(); while (reader.Read()) { // 0 - MailId // 1 - Sender // 2 - Receiptent // 3 - Date // 4 - IsRead // 5 - IsChecked // 6 - Topic // 7 - Message // 8 - Attachment // 9 - Zeny Mail mailsubject = new Mail(); mailsubject.MailId = reader.GetUInt32(0); mailsubject.Sender = reader.GetString(1); mailsubject.Time = reader.GetDateTime(3); mailsubject.IsRead = reader.GetByte(4); mailsubject.Topic = reader.GetString(6); mailsubject.Message = reader.GetString(7); mailsubject.Zeny = (int)reader.GetUInt32(9); if (reader.IsDBNull(8) == false) { byte[] buffer = new byte[67]; reader.GetBytes(8, 0, buffer, 0, 67); Rag2Item.Deserialize(out mailsubject.Attachment, buffer, 0); } if (mailsubject.IsRead == 0) { mailsubject.Valid = (byte)(30 - Math.Min(30, (int)((DateTime.Now - mailsubject.Time).TotalDays))); } yield return mailsubject; } } finally { if (reader != null) reader.Close(); ConnectionPool.Release(connection); } }
/// <Sql> /// SELECT /// * /// FROM /// list_maildata /// WHERE /// Receiptent=?Receiptent /// AND /// IsInbox=1; /// </Sql> public IEnumerable<Mail> GetInboxMail(MySqlConnection connection, Character target) { MySqlCommand command = new MySqlCommand(_query_35, connection); MySqlCommand command2 = new MySqlCommand(_query_36, connection); command.Parameters.AddWithValue("Receiptent", target.Name); command2.Parameters.AddWithValue("Receiptent", target.Name); MySqlDataReader reader = null; List<Mail> list = new List<Mail>(); try { command2.ExecuteNonQuery(); reader = command.ExecuteReader(); while (reader.Read()) { Mail mailsubject = new Mail(); mailsubject.MailId = reader.GetUInt32(0); mailsubject.MailId = reader.GetUInt32(0); mailsubject.Sender = reader.GetString(2); mailsubject.Time = reader.GetDateTime(3); mailsubject.IsRead = reader.GetByte(4); mailsubject.Topic = reader.GetString(6); mailsubject.Message = reader.GetString(7); mailsubject.Zeny = (int)reader.GetUInt32(9); if (reader.IsDBNull(8) == false) { byte[] buffer = new byte[67]; reader.GetBytes(8, 0, buffer, 0, 67); Rag2Item.Deserialize(out mailsubject.Attachment, buffer, 0); } if (mailsubject.IsRead == 0) { mailsubject.Valid = (byte)(30 - Math.Min(30, (int)((DateTime.Now - mailsubject.Time).TotalDays))); } else { DateTime dateread = reader.GetDateTime(10); mailsubject.Valid = (byte)(7 - Math.Min(7, (int)((DateTime.Now - dateread).TotalDays))); } list.Add(mailsubject); } return list; } catch (Exception e) { __dbtracelog.WriteError("Database", e.Message); return list; } finally { if (reader != null) reader.Close(); } }