using LitJson; using System; using System.Collections.Generic; using System.Linq; using System.Text; using TableConfig; namespace Snxxz.UI { public class ActivitiesPushMgr : Model,IBeforePlayerDataInitialize,IAfterPlayerDataInitialize,IPlayerLoginOk { public const int WholePeopleRankStart = 2091000; //全民冲榜开始 public const int WholePeopleRankEnd = 20910000; //全民冲榜截止 ImpactRankModel impactRank { get { return ModelCenter.Instance.GetModel(); } } private List rankTypelist = new List(); public override void Init() { List configs = Config.Instance.GetAllValues(); for(int i = 0; i < configs.Count; i++) { if(!rankTypelist.Contains(configs[i].RangListType)) { rankTypelist.Add(configs[i].RangListType); } } } public void OnBeforePlayerDataInitialize() { } public void OnAfterPlayerDataInitialize() { } public void OnPlayerLoginOk() { SetRankStartPushInfo(); SetRankEndPushInfo(); GlobalTimeEvent.Instance.minuteEvent -= RefreshMinuteTime; GlobalTimeEvent.Instance.minuteEvent += RefreshMinuteTime; OpenServerActivityCenter.Instance.openServerActivityStateChange -= RefreshOpenServerState; OpenServerActivityCenter.Instance.openServerActivityStateChange += RefreshOpenServerState; } public override void UnInit() { } private void RefreshMinuteTime() { RemovePushByTime(PushInfoType.RankStart,11); RemovePushByTime(PushInfoType.RankEnd,23); } private void RefreshOpenServerState() { SetRankStartPushInfo(); SetRankEndPushInfo(); RemovePushByActiveClose(PushInfoType.RankStart); RemovePushByActiveClose(PushInfoType.RankEnd); } private void SetRankStartPushInfo() { for(int i = 0; i 0) { PlayerRankData.RankType rankType = impactRank.GetRankType(rankTypelist[i]); string rankName = StringUtility.Contact("OSCBillRankTitle_", rankType); SendPushInfo(GetPushJsonData(rankStartId, remainSecond, Language.Get("SetUpPrivate106"), Language.Get("SetUpPrivate107",Language.Get(rankName)))); } } } } private void SetRankEndPushInfo() { for(int i = 0; i < rankTypelist.Count; i++) { int rankEndId = WholePeopleRankEnd + rankTypelist[i]; if (impactRank.IsActivityClose(rankTypelist[i])) { RemovePushInfo(rankEndId); } else { int day = impactRank.GetSurplusDay(rankTypelist[i]); int remainHour = 23 - TimeUtility.ServerNow.Hour; int remainMinute = 0 - TimeUtility.ServerNow.Minute; int remainSecond = (day - 1) * 24 * 60 * 60 + remainHour * 60 * 60 + remainMinute * 60; if (remainSecond > 0) { PlayerRankData.RankType rankType = impactRank.GetRankType(rankTypelist[i]); string rankName = StringUtility.Contact("OSCBillRankTitle_", rankType); SendPushInfo(GetPushJsonData(rankEndId, remainSecond, Language.Get("SetUpPrivate106"), Language.Get("SetUpPrivate108", Language.Get(rankName)))); } } } } private void RemovePushByActiveClose(PushInfoType type) { switch (type) { case PushInfoType.RankStart: for (int i = 0; i < rankTypelist.Count; i++) { int rankStartId = WholePeopleRankStart + rankTypelist[i]; if (impactRank.IsActivityClose(rankTypelist[i])) { RemovePushInfo(rankStartId); } } break; case PushInfoType.RankEnd: for (int i = 0; i < rankTypelist.Count; i++) { int rankEndId = WholePeopleRankEnd + rankTypelist[i]; if (impactRank.IsActivityClose(rankTypelist[i])) { RemovePushInfo(rankEndId); } } break; } } private void RemovePushByTime(PushInfoType type,int time) { int remainHour = time - TimeUtility.ServerNow.Hour; int remainMinute = 0 - TimeUtility.ServerNow.Minute; int remainSecond = remainHour * 60 * 60 + remainMinute * 60; switch (type) { case PushInfoType.RankStart: for (int i = 0; i < rankTypelist.Count; i++) { int rankStartId = WholePeopleRankStart + rankTypelist[i]; if (!impactRank.IsActivityClose(rankTypelist[i])) { int day = impactRank.GetOpenDay(rankTypelist[i]); if (day <= 0 && remainSecond <= 120) { RemovePushInfo(rankStartId); } } } break; case PushInfoType.RankEnd: for (int i = 0; i < rankTypelist.Count; i++) { int rankEndId = WholePeopleRankEnd + rankTypelist[i]; if (!impactRank.IsActivityClose(rankTypelist[i])) { int day = impactRank.GetSurplusDay(rankTypelist[i]); if (day <= 1 && remainSecond <= 120) { RemovePushInfo(rankEndId); } } } break; } } public void RemovePushInfo(int pushId) { SDKUtility.Instance.GeTui_RemoveLocalMessage(pushId.ToString()); } public void SendPushInfo(JsonData data) { SDKUtility.Instance.GeTui_SendLocalMessage(data); } public JsonData GetPushJsonData(int pushId,int pushtime,string title,string content) { JsonData _params = new JsonData(); _params["code"] = 2005; _params["id"] = pushId;// id 重要, 标示每个通知的更新或者移除 _params["title"] = title;// 推送标题 _params["subtitle"] = "";// 副标题 _params["content"] = content;// 具体内容 _params["badge"] = -1;// 角标 // 以下为决定应该多久后弹出此通知 System.TimeSpan ts = System.DateTime.UtcNow - new System.DateTime(1970, 1, 1, 0, 0, 0, 0); long ret = System.Convert.ToInt64(ts.TotalSeconds) + pushtime;// 表示3秒后 _params["fireTime"] = ret; return _params; } public enum PushInfoType { RankStart, RankEnd, } } }