Exemple #1
0
    /*sub class register or unregister event callback entrance.*/

    /// <summary>
    /// 负责事件接收模块的注册
    /// </summary>
    /// <param name="type">模块类型</param>
    /// <param name="receiver">模块接口实例</param>
    public void Register(RoleEventNodeType type, RoleNumber number, IEventReceiver receiver)
    {
        try
        {
            _receivers.TryGetValue(number, out var receivers);
            receivers = receivers ?? (_receivers[number] = new Dictionary <RoleEventNodeType, IEventReceiver>());
            if (!receivers.ContainsKey(type))
            {
                receivers.Add(type, receiver);
            }
        }
        catch (Exception e) { Debug.Log(e.Message); }
    }
Exemple #2
0
    /// <summary>
    /// 负责模块的GET
    /// </summary>
    /// <typeparam name="T">模块类型</typeparam>
    /// <returns></returns>
    public T Mgr <T>(RoleNumber number) where T : class
    {
        MutiRoleObserver observer = default;

        try
        {
            if (_observers.TryGetValue(number, out var roles))
            {
                roles?.TryGetValue(typeof(T).Name, out observer);
            }
        }
        catch (Exception e) { Debug.Log(e.Message); }
        return(observer as T);
    }
Exemple #3
0
 /// <summary>
 /// 负责事件接收模块的反注册
 /// </summary>
 /// <param name="type">模块类型</param>
 public void UnRegister(RoleEventNodeType type, RoleNumber number)
 {
     try
     {
         if (_receivers.TryGetValue(number, out var receivers))
         {
             if (receivers != null && receivers.ContainsKey(type))
             {
                 receivers.Remove(type);
             }
         }
     }
     catch (Exception e) { Debug.Log(e.Message); }
 }
Exemple #4
0
 /// <summary>
 /// 负责模块的反注册
 /// </summary>
 /// <typeparam name="T">模块类型</typeparam>
 public void UnRegister <T>(RoleNumber number)
 {
     try
     {
         var key = typeof(T).Name;
         if (_observers.TryGetValue(number, out var roles))
         {
             if ((bool)roles?.ContainsKey(key))
             {
                 roles.Remove(key);
             }
         }
     }
     catch (Exception e) { Debug.Log(e.Message); }
 }
Exemple #5
0
    /*event dispatch and receiver entrance.*/

    /// <summary>
    /// 负责分派内容到具体事件
    /// </summary>
    /// <param name="node">事件节点</param>
    public void OnEventDispatch(RoleNumber number, IEventNode @event)
    {
        try
        {
            if (_receivers.TryGetValue(number, out var receivers))
            {
                IEventReceiver receiver = default;
                if ((bool)receivers?.TryGetValue((@event as IRoleEventNode).NodeType, out receiver))
                {
                    receiver?.OnEventReceiver(@event);
                }
            }
        }
        catch (Exception e) { Debug.Log(e.Message); }
    }
Exemple #6
0
    /*sub class register or unregister instance entrance.*/

    /// <summary>
    /// 负责模块的注册
    /// </summary>
    /// <typeparam name="T">模块类型</typeparam>
    /// <param name="t">模块实例</param>
    /// <param name="replace"></param>
    public void Register <T>(RoleNumber number, T t, bool replace = false) where T : class
    {
        try
        {
            var key = typeof(T).Name;
            if (t == null)
            {
                return;
            }

            _observers.TryGetValue(number, out var roles);
            roles = roles ?? (_observers[number] = new Dictionary <string, MutiRoleObserver>());
            if (roles.ContainsKey(key) && replace)
            {
                roles[key] = t as MutiRoleObserver;
                return;
            }
            roles.Add(key, t as MutiRoleObserver);
        }
        catch (Exception e) { Debug.Log(e.Message); }
    }
Exemple #7
0
 /// <summary>
 /// 负责接收外部传来的事件内容
 /// </summary>
 /// <param name="node">事件节点</param>
 public void OnEventReceiver(RoleNumber number, IEventNode @event)
 {
     OnEventDispatch(number, @event);
 }