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<ImpactRankModel>(); } }
|
private List<int> rankTypelist = new List<int>();
|
|
public override void Init()
|
{
|
List<OSCBillRankAwardConfig> configs = Config.Instance.GetAllValues<OSCBillRankAwardConfig>();
|
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 <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)
|
{
|
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,
|
}
|
}
|
}
|