Ejemplo n.º 1
0
    protected string NotifyToHandler <T>(List <T> handlers, bool hasOverride, bool hasReturnValue, string methodName, params object[] args)
    {
        if (handlers == null)
        {
            return(StringUtil.Format("NotificationManager.NotifyToHandler -> null is handlers. method nmae : {0}", methodName));
        }

        if (handlers.Count == 0)
        {
            return(StringUtil.Format("NotificationManager.NotifyToHandler -> zero count handler list. method name : {0}", methodName));
        }

        System.Type[] types = new System.Type[args.Length];
        for (int i = 0; i < types.Length; i++)
        {
            if (args[i] != null)
            {
                types[i] = args[i].GetType();

                if (Setting.UseDebugLog == true)
                {
                    string format = "{0}, {1} <{2}>";
                    if (i == 0)
                    {
                        format = "{0}, args = {1} <{2}>";
                    }
                    Setting.debugHandlerLogInfo = StringUtil.Format(format, Setting.debugHandlerLogInfo, types[i].ToString(), args[i].ToString());
                }
            }
        }

        string result = string.Empty;

        foreach (T handler in handlers)
        {
            if (null == handler)
            {
                continue;
            }

            MethodInfo method = handler.GetType().GetMethod(methodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic,
                                                            System.Type.DefaultBinder, types, null);

            bool returnValue = false;
            bool IsNotify    = false;
            if (method != null)
            {
                try
                {
                    IsNotify = true;
                    if (hasOverride == true)
                    {
                        IsNotify = method.IsOverride();
                    }

                    if (IsNotify == true)
                    {
                        var returnValueObject = method.Invoke(handler, args);
                        if (hasReturnValue == true && returnValueObject != null)
                        {
                            returnValue = System.Convert.ToBoolean(returnValueObject);
                        }
                    }
                }
                catch (System.Exception ex)
                {
                    throw ex;
                }
            }
            else
            {
                if (result == string.Empty)
                {
                    result = StringUtil.Format("NotificationManager.NotifyToHandler -> not find method. handler name : {0}, method name : {1}\n", handler.ToString(), methodName);
                }
                else
                {
                    result = StringUtil.Format("{0}NotificationManager.NotifyToHandler -> not find method. handler name : {1}, method name : {2}\n", result, handler.ToString(), methodName);
                }
            }

            if (Setting.UseDebugLog == true)
            {
                if (method != null)
                {
                    Setting.AddDebugHandlerInfo(StringUtil.Format("Invoke = {0} / name = {1}, method = {2}", IsNotify.ToString(), handler.ToString(), method.ToString()));
                }
                else
                {
                    Setting.AddDebugHandlerInfo(StringUtil.Format("Invoke = False / name = {0}, method = {1}", handler.ToString(), methodName));
                }
            }

            if (returnValue == true)
            {
                return(result);
            }
        }

        return(result);
    }