using LitJson; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace vnxbqy.UI { public class ActivitiesPushModel : Model, IBeforePlayerDataInitialize, IAfterPlayerDataInitialize, IPlayerLoginOk { public const int WholePeopleRankStart = 2091000; //全民冲榜开始 public const int WholePeopleRankEnd = 20910000; //全民冲榜截止 public const int FlashRushToBuy = 209014; //限时抢购 ImpactRankModel impactRank { get { return ModelCenter.Instance.GetModel(); } } FlashRushToBuyModel rushToBuyModel { get { return ModelCenter.Instance.GetModel(); } } private List rankTypelist = new List(); public override void Init() { List configs = OSCBillRankAwardConfig.GetValues(); for (int i = 0; i < configs.Count; i++) { if (!rankTypelist.Contains(configs[i].RangListType)) { rankTypelist.Add(configs[i].RangListType); } } } public void OnBeforePlayerDataInitialize() { rushToBuyModel.UpdateAllAppointmentEvent -= UpdateAllAppointment; rushToBuyModel.UpdateAppointmentEvent -= UpdateAppointment; GlobalTimeEvent.Instance.minuteEvent -= RefreshMinuteTime; OpenServerActivityCenter.Instance.openServerActivityStateChange -= RefreshOpenServerState; } public void OnAfterPlayerDataInitialize() { } public void OnPlayerLoginOk() { SetRankStartPushInfo(); SetRankEndPushInfo(); SetFlashRushToBuyAppointmentInfo(); GlobalTimeEvent.Instance.minuteEvent += RefreshMinuteTime; OpenServerActivityCenter.Instance.openServerActivityStateChange += RefreshOpenServerState; rushToBuyModel.UpdateAllAppointmentEvent += UpdateAllAppointment; rushToBuyModel.UpdateAppointmentEvent += UpdateAppointment; } public override void UnInit() { } private void RefreshMinuteTime() { RemovePushByTime(PushInfoType.RankStart, 11); RemovePushByTime(PushInfoType.RankEnd, 23); RemoveFlashRushToBuyAppointmentByTime(); } private void RefreshOpenServerState() { SetRankStartPushInfo(); SetRankEndPushInfo(); RemovePushByActiveClose(PushInfoType.RankStart); RemovePushByActiveClose(PushInfoType.RankEnd); SetFlashRushToBuyAppointmentInfo(); } #region 开服活动冲榜推送 private void SetRankStartPushInfo() { return; for (int i = 0; i < rankTypelist.Count; i++) { int rankStartId = WholePeopleRankStart + rankTypelist[i]; if (impactRank.IsActivityClose(rankTypelist[i])) { RemovePushInfo(rankStartId); } else { int day = impactRank.GetOpenDay(rankTypelist[i]); int remainHour = 11 - TimeUtility.ServerNow.Hour; int remainMinute = 0 - TimeUtility.ServerNow.Minute; int remainSecond = day * 24 * 60 * 60 + remainHour * 60 * 60 + remainMinute * 60; if (remainSecond > 0) { 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() { return; 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) { 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) { return; 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) { return; 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; } } #endregion #region 限时抢购推送 private void UpdateAllAppointment() { SetFlashRushToBuyAppointmentInfo(); } private void UpdateAppointment(int shopGuid) { return; if (!rushToBuyModel.IsOpen) return; var operation = rushToBuyModel.GetOperationFlashRushToBuy(); int pushId = FlashRushToBuy * 10 + shopGuid; OperationFlashRushToBuy.FlashSaleItem saleItem; OperationFlashRushToBuy.FlashSaleShop saleShop; bool isSaleItem = operation.TryGetFlashItem(shopGuid, out saleShop, out saleItem); if (isSaleItem) { if (saleItem.isAppointment != 1) { RemovePushInfo(pushId); } else { int seconds = 0; int buyState = operation.GetBuyTimeState(TimeUtility.ServerNow, saleShop.dayIndex, saleShop.timeIndex, out seconds); if (seconds > 800) { int remainSecond = seconds - 600; SendPushInfo(GetPushJsonData(pushId, remainSecond, Language.Get("buymail1"), Language.Get("buymail2"))); } } } } private void SetFlashRushToBuyAppointmentInfo() { return; if (!rushToBuyModel.IsOpen) return; var operation = rushToBuyModel.GetOperationFlashRushToBuy(); for (int i = 0; i < operation.flashShops.Count; i++) { var flashShop = operation.flashShops[i]; int seconds = 0; int buyState = operation.GetBuyTimeState(TimeUtility.ServerNow, flashShop.dayIndex, flashShop.timeIndex, out seconds); var saleItems = operation.flashShops[i].items; for (int j = 0; j < saleItems.Length; j++) { int pushId = FlashRushToBuy * 10 + saleItems[j].shopGuid; if (buyState == -1 && seconds > 800 && saleItems[j].isAppointment == 1) { int remainSecond = seconds - 600; SendPushInfo(GetPushJsonData(pushId, remainSecond, Language.Get("buymail1"), Language.Get("buymail2"))); } else { RemovePushInfo(pushId); } } } } private void RemoveFlashRushToBuyAppointmentByTime() { return; if (!rushToBuyModel.IsOpen) return; var operation = rushToBuyModel.GetOperationFlashRushToBuy(); for (int i = 0; i < operation.flashShops.Count; i++) { var flashShop = operation.flashShops[i]; int seconds = 0; int buyState = operation.GetBuyTimeState(TimeUtility.ServerNow, flashShop.dayIndex, flashShop.timeIndex, out seconds); var saleItems = operation.flashShops[i].items; for (int j = 0; j < saleItems.Length; j++) { int pushId = FlashRushToBuy * 10 + saleItems[j].shopGuid; if (buyState != -1) { RemovePushInfo(pushId); } else { if (seconds <= 180) { RemovePushInfo(pushId); } } } } } #endregion public void RemovePushInfo(int pushId) { ynmbxxjUtil.Instance.GeTui_RemoveLocalMessage(pushId.ToString()); } public void SendPushInfo(JsonData data) { ynmbxxjUtil.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, } } }