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();
}
}
}