using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FObjBase.Reflect
{
    /// <summary>
    /// 注册 event 返回类型;
    /// 客户端，默认使用 Trigger_xxxx(xxxx为event名称)，作为触发事件的函数，该函数的参数类型就是EventArgsType;
    /// </summary>
    public class PushAttribute : Attribute
    {
        public const string DefaultTriggerNameHeader = "Trigger_";
        public Type EventArgsType;
        public string TriggerName;
        public PushAttribute(Type eventArgsType)
        {
            EventArgsType = eventArgsType;
        }
        public PushAttribute(Type eventArgsType, string triggerName)
        {
            EventArgsType = eventArgsType;
            TriggerName = triggerName;
        }
    }

    /// <summary>
    /// 注册远程调用返回类型; 回调函数名称只能是 AsyncCBHandler asyncDelegate, object asyncContext
    /// </summary>
    public class CallAttribute : Attribute
    {
        public Type ReponseType;
        public CallAttribute()
        {

        }
        public CallAttribute(Type reponseType)
        {
            ReponseType = reponseType;
        }
    }

    /// <summary>
    /// 注册 它的PropertyChanged 事件，且枚举它的子属性，
    /// 找到[PropertyPush] 递归 注册下去
    /// </summary>
    public class PropertyPushAttribute : Attribute
    {
        
    }


}
