Эх сурвалжийг харах

Merge branch 'master' of http://10.108.64.190:3000/gfg/client

guodong 2 жил өмнө
parent
commit
25bdd9f4a4

+ 5 - 0
GameClient/Assets/Game/HotUpdate/Constant/ConstMessage.cs

@@ -124,5 +124,10 @@ namespace GFGGame
         public const string CONTINUOUS_REBATE_GIFT = "CONTINUOUS_REBATE_GIFT";//领取连续返利礼包
         public const string CONTINUOUS_REBATE_GIFT_SHOP_BUY = "CONTINUOUS_REBATE_GIFT_SHOP_BUY";
         public const string ACTIVITY_LUCKY_BOX = "ACTIVITY_LUCKY_BOX";//通知限时抽奖活动剩余次数
+        
+        //通知活动移除
+        public const string ACTIVITY_REMOVE = "ACTIVITY_REMOVE";
+        //通知活动添加
+        public const string ACTIVITY_ADD = "ACTIVITY_ADD";
     }
 }

+ 1 - 0
GameClient/Assets/Game/HotUpdate/Controller/GameController.cs

@@ -256,6 +256,7 @@ namespace GFGGame
             EnduringGiftBoxSProxy.ReqGetAllGiftBagRebateStatus().Coroutine();
             ChatSProxy.ReqQueryChatMsg(ChatType.League).Coroutine();
             ChatSProxy.ReqQueryChatMsg(ChatType.LeagueQuestion).Coroutine();
+            ActivityGlobalSProxy.GetActivityInfo().Coroutine();
 
             int storageAutoPlay = StorageDataManager.Instance.GetStorageValue(ConstStorageId.STORAGE_AUTO_PLAY);
             FightDataManager.Instance.autoPlay = storageAutoPlay <= 0 ? false : true;

+ 78 - 0
GameClient/Assets/Game/HotUpdate/Data/ActivityGlobalDataManager.cs

@@ -0,0 +1,78 @@
+using System.Collections.Generic;
+using System.Linq;
+using ET;
+using FairyGUI;
+
+namespace GFGGame
+{
+    public class ActivityInfo
+    {
+        public int activityId;
+
+        public long startTime;
+
+        public long endTime;
+    }
+
+    public class ActivityGlobalDataManager : SingletonBase<ActivityGlobalDataManager>
+    {
+        private Dictionary<int, ActivityInfo> activityInfos = new Dictionary<int, ActivityInfo>();
+
+        private Dictionary<int, List<int>> activityInfosByType = new Dictionary<int, List<int>>();
+
+        //添加活动数据
+        public void AddActivityInfo(ActivityInfo activityInfo)
+        {
+            if (activityInfo == null) return;
+            if (activityInfos.ContainsKey(activityInfo.activityId)) return;
+            activityInfos.Add(activityInfo.activityId, activityInfo);
+            if (!activityInfosByType.ContainsKey(activityInfo.activityId))
+            {
+                activityInfosByType.Add(activityInfo.activityId, new List<int>());
+            }
+            activityInfosByType[activityInfo.activityId].Add(activityInfo.activityId);
+            //ACTIVITY_ADD
+            EventAgent.DispatchEvent(ConstMessage.ACTIVITY_ADD, activityInfo.activityId);
+            //TODO 判断下时间非法情况
+            Timers.inst.Add(activityInfo.endTime - TimeHelper.ServerNow(), 0, ClientRemoveActivityInfo,
+                activityInfo.activityId);
+        }
+
+        private static void ClientRemoveActivityInfo(object param)
+        {
+            var activityId = (int)param;
+            ActivityGlobalSProxy.ReqCloseActivity(activityId).Coroutine();
+        }
+
+        //RemoveActivityInfo
+        public void RemoveActivityInfo(int activityId)
+        {
+            if (!activityInfos.ContainsKey(activityId)) return;
+            activityInfos.Remove(activityId);
+            if (!activityInfosByType.ContainsKey(activityId)) return;
+            activityInfosByType.Remove(activityId);
+            //ACTIVITY_REMOVE
+            EventAgent.DispatchEvent(ConstMessage.ACTIVITY_REMOVE, activityId);
+        }
+
+        //获取活动数据
+        public ActivityInfo GetActivityInfo(int activityId)
+        {
+            if (!activityInfos.ContainsKey(activityId)) return null;
+            return activityInfos[activityId];
+        }
+
+        //获取活动数据根据类型
+        public List<int> GetActivityInfoIdsByType(int activityType)
+        {
+            return !activityInfosByType.ContainsKey(activityType) ? new List<int>() : activityInfosByType[activityType];
+        }
+
+        //获取活动数据根据类型
+        public List<ActivityInfo> GetActivityInfoByType(int activityType)
+        {
+            var activityInfoIds = GetActivityInfoIdsByType(activityType);
+            return activityInfoIds.Select(GetActivityInfo).Where(activityInfo => activityInfo != null).ToList();
+        }
+    }
+}

+ 3 - 0
GameClient/Assets/Game/HotUpdate/Data/ActivityGlobalDataManager.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 6ffaecd67741449e8034482090b52e39
+timeCreated: 1685762521

+ 72 - 0
GameClient/Assets/Game/HotUpdate/ServerProxy/ActivityGlobalSProxy.cs

@@ -0,0 +1,72 @@
+using ET;
+using GFGGame;
+
+namespace ET
+{
+    //S2C_NoticeActivityOpen
+    public class S2C_NoticeActivityOpenHandler : AMHandler<S2C_NoticeActivityOpen>
+    {
+        protected override async ETTask Run(Session session, S2C_NoticeActivityOpen message)
+        {
+            ActivityGlobalDataManager.Instance.AddActivityInfo(new ActivityInfo
+            {
+                activityId = message.ActivityId,
+                startTime = message.StartTime,
+                endTime = message.EndTime
+            });
+            await ETTask.CompletedTask;
+        }
+    }
+    
+    //S2C_NoticeActivityClose
+    public class S2C_NoticeActivityCloseHandler : AMHandler<S2C_NoticeActivityClose>
+    {
+        protected override async ETTask Run(Session session, S2C_NoticeActivityClose message)
+        {
+            ActivityGlobalDataManager.Instance.RemoveActivityInfo(message.ActivityId);
+            await ETTask.CompletedTask;
+        }
+    }
+}
+
+namespace GFGGame
+{
+    public class ActivityGlobalSProxy
+    {
+        public static async ETTask GetActivityInfo()
+        {
+            var c2SGetActivityList = new C2S_GetActivityList();
+            //获取活动数据,这里是一次性拉去所有活动数据,如果活动数据量大,可以分类型拉取
+            c2SGetActivityList.Type.Add(0);
+            var response = (S2C_GetActivityList)await MessageHelper.SendToServer(c2SGetActivityList);
+            if (!(response is { Error: ErrorCode.ERR_Success }))
+            {
+                Log.Error("GetActivityInfo error");
+                return;
+            }
+            response.ActivityList.ForEach(activityInfo =>
+            {
+                ActivityGlobalDataManager.Instance.AddActivityInfo(new ActivityInfo
+                {
+                    activityId = activityInfo.ActivityId,
+                    startTime = activityInfo.StartTime,
+                    endTime = activityInfo.EndTime
+                });
+            });
+        }
+
+        //C2S_CloseActivity
+        public static async ETTask<bool> ReqCloseActivity(int activityId)
+        {
+            var response =
+                (S2C_CloseActivity)await MessageHelper.SendToServer(new C2S_CloseActivity()
+                    { ActivityId = activityId });
+            if (!(response is { Error: ErrorCode.ERR_Success }))
+            {
+                Log.Error("ReqCloseActivity error");
+                return false;
+            }
+            return true;
+        }
+    }
+}

+ 3 - 0
GameClient/Assets/Game/HotUpdate/ServerProxy/ActivityGlobalSProxy.cs.meta

@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: af8ba20371d34f6cb41a29aad5df7459
+timeCreated: 1685762716