using Newtonsoft.Json.Linq; using System; using System.Diagnostics; using CSharpUtil.Extensions.Time; namespace BossServer.server { /// /// 邮件类型枚举 /// public enum EMailType { /// /// 系统邮件 /// SystemMail = 1, /// /// 好友雇佣 /// [Obsolete] HireCoin, /// /// PVP阶段奖励 /// [Obsolete] PvpLeagueReward, /// /// pvp上榜奖励 /// PvpRankReward, /// /// 公会申请被拒 /// [Obsolete] GuildApplyRefuse, /// /// 公会捐献结算 /// [Obsolete] GuildDonateSettle, /// /// 公会钻石礼包 /// [Obsolete] GuildCashGiftReward, /// /// 公会公告/通知邮件 /// [Obsolete] GuildNotice } /// /// 邮件发送功能 /// class EmailProc { /// /// 邮件最大容量100封 /// internal const int MaxMailContent = 100; /// /// 邮件最大过期时间7天 /// internal const int MaxMailExpireTs = 604800; /// /// Mysql邮件日志表 /// const string MailLog_TableName = "tab_mailrecord"; /// /// 系统邮件 - 发送世界boss战奖励邮件 /// /// /// /// /// /// public static void SendWorldBossReward(int zoneid, string uid, int index,string rewardName, string reward) { var mail = new Email(EMailType.SystemMail, "世界boss奖励", $"恭喜您在世界boss战斗中输出伤害排{index}名,获得{rewardName}奖励!", reward); InsertMail(zoneid, uid, mail); } /// /// 插入邮件 /// /// /// /// private static int InsertMail(int zoneid, string uid, Email mail) { var mem = Redis.Ins.GetDatabase(0); var key_id = MemKey_User.Mail_CurId_int(zoneid, uid); var key_queue = MemKey_User.Mail_Queue_hash(zoneid, uid); mail.insertts = (int)DateTime.Now.ToUnixTimeStamp(); mail.mailId = (int)mem.StringIncrement(key_id); if (!mem.HashSet(key_queue, mail.mailId.ToString(), mail.ToString())) { // 重试下 mail.mailId = (int)mem.StringIncrement(key_id); if (!mem.HashSet(key_queue, mail.mailId.ToString(), mail.ToString())) { } } logMail(zoneid, uid, mail); // 将邮件写入Mysql中 return mail.mailId; } /// /// 写邮件日志 /// /// /// /// private static void logMail(int zoneid, string uid, Email mail) { var sql = $" Insert Into {MailLog_TableName} (`mailId`, `zoneid`, `appendix`, `type`, `sender_name`, `sender_uid`, `to_uid`, `title`, `content`, `tag`) " + $"values({mail.mailId},{zoneid},{mail.appendix}, {mail.type}, {mail.sender_name}, {mail.sender_uid}, {uid}, {mail.title}, {mail.content}, {mail.tag})"; var n = MysqlUtil.Ins.ExecuteSqlNonQuery(sql); Debug.Assert(n > 0, $"{sql} 执行失败!"); } } public class Email { public int mailId = 0; public string sender_uid; public string sender_name; public string appendix; public int type; public string title; public string content; public object tag; public int readts = 0; public int drawedts = 0; public int insertts = 0; public bool isDrawed() => drawedts > 0; public bool isExistsReward() => !string.IsNullOrEmpty(appendix); public int ExpireTs() => insertts + EmailProc.MaxMailExpireTs; public Email(EMailType emailType,string title, string content,string reward,string uid_sender="系统",string name_sender="系统") { this.type =(int) emailType; this.title = title; this.content = content; this.appendix = reward; this.sender_uid = uid_sender; this.sender_name = name_sender; } public override string ToString() { return new JObject(this).ToString(); } } }