| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- using System;
- using System.Collections.Generic;
- namespace SFramework{
- public static class SEventManager {
- public enum EVENT {
- BEGIN = 0,
- //UI_ACTIVE_WELCOME,
- //UI_ACTIVE_SETTING,
- //UI_ACTIVE_BUY,
- //IAP_DATA_READY,
- //IAP_PAY_SUCCESS,
- //IAP_PAY_FAILED,
- //ADS_PLAY_FINISH,
- //ADS_PLAY_SKIPPED,
- //ADS_PLAY_FAILED,
- //ADS_PLAY_CONTINUE,
- //HTTP_QUERY_RECORD_RESPOND,
- //HTTP_COMMIT_RECORD_SUCCESS,
- END,
- }
- public delegate void EventCallbackDelegate(EVENT ev, Object[] args);
- private static Dictionary<EVENT, EventCallbackDelegate> _dictEvents;
- private static List<EventCallbackDelegate> _lstGlobalEventCallback;
- private static List<Action> _lstActions;
- static SEventManager() {
- _lstGlobalEventCallback = new List<EventCallbackDelegate>() {DefaultEventCallback};
- _lstActions = new List<Action>();
- _dictEvents = new Dictionary<EVENT, EventCallbackDelegate>();
- for (EVENT ev = EVENT.BEGIN + 1; ev < EVENT.END; ++ev) {
- _dictEvents[ev] = new EventCallbackDelegate(DefaultEventCallback);
- }
- }
- public static void DestroyAllSceneEvent() {
- for (EVENT ev = EVENT.BEGIN + 1; ev < EVENT.END; ++ev) {
- foreach (Delegate i in _dictEvents[ev].GetInvocationList()) {
- if (!_lstGlobalEventCallback.Contains(i as EventCallbackDelegate)) {
- _dictEvents[ev] -= (i as EventCallbackDelegate);
- }
- }
- }
- }
- private static void DefaultEventCallback(EVENT ev, Object[] args) {
- }
- public static void RegisterGlobalEvent(EVENT ev, EventCallbackDelegate cb) {
- _lstActions.Add(() => {
- _lstGlobalEventCallback.Add(cb);
- _dictEvents[ev] += cb;
- });
- TryProcessActions();
- }
- public static void RegisterEvent(EVENT ev, EventCallbackDelegate cb) {
- _lstActions.Add(() => {
- _dictEvents[ev] += cb;
- });
- TryProcessActions();
- }
- public static void UnregisterEvent(EVENT ev, EventCallbackDelegate cb) {
- _lstActions.Add(() => {
- _dictEvents[ev] -= cb;
- _lstGlobalEventCallback.Remove(cb);
- });
- TryProcessActions();
- }
- private static void TryProcessActions() {
- if (_lstActions.Count > 1) {
- return;
- }
- while (_lstActions.Count > 0) {
- Action action = _lstActions[0];
- try {
- action();
- } catch (Exception e) {
- UnityEngine.Debug.LogError(String.Format("ProcessAction Error:" + e.StackTrace));
- } finally {
- UnityEngine.Debug.Assert(_lstActions[0] == action, "Action List Changed during Processing");
- _lstActions.RemoveAt(0);
- }
- }
- }
- private static void FireEventInternal(EVENT ev, Object[] args) {
- //UnityEngine.Debug.Log("FireEvent:" + ev.ToString());
- foreach (EventCallbackDelegate cb in _dictEvents[ev].GetInvocationList()) {
- try {
- cb(ev, args);
- } catch (Exception e) {
- UnityEngine.Debug.LogError(String.Format("ProcessEvent {0} Message:{1} Error:{2}", ev.ToString(), e.Message, e.StackTrace));
- }
- }
- }
-
- public static void FireEvent(EVENT ev, params object[] args) {
- //UnityEngine.Debug.Log("EventManager FireEvent -> Event.Name: " + ev.ToString() + " Length: " + args.Length.ToString());
-
- _lstActions.Add(()=> {
- FireEventInternal(ev, args);
- });
- TryProcessActions();
- }
- }
- }
|