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<ImpactRankModel>(); } }
|
FlashRushToBuyModel rushToBuyModel { get { return ModelCenter.Instance.GetModel<FlashRushToBuyModel>(); } }
|
|
private List<int> rankTypelist = new List<int>();
|
|
public override void Init()
|
{
|
List<OSCBillRankAwardConfig> 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,
|
}
|
}
|
}
|