예제 #1
0
        internal void OnInit(Connection connection, WidgetContext context, Widget widget)
        {
            ID = widget.ID;

            Connection = connection;
            Context    = context;

            object objConfig = widget.Config.ToObject(ConfigType) !;

            widget.Config = StdJson.ObjectToJObject(objConfig);
            SetConfig(objConfig);

            Type   type   = GetType();
            string prefix = RequestMethodNamePrefix;
            int    N      = prefix.Length;

            MethodInfo[] methods =
                type.GetMethods(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance)
                .Where(m => m.Name.StartsWith(prefix))
                .ToArray();

            foreach (MethodInfo m in methods)
            {
                ParameterInfo[] parameters = m.GetParameters();

                UIReqDelegate theDelegate = (object?[] args) => {
                    return((Task <ReqResult>)m.Invoke(this, args) !);
                };

                UiReqPara[] uiReqParameters = parameters.Select(MakeParameter).ToArray();

                string key = m.Name.Substring(N);
                mapUiReqMethods[key] = new UiReqMethod(theDelegate, uiReqParameters);
            }
        }
예제 #2
0
        public virtual Task OnInit(Connection connection, ViewContext context, DataValue config)
        {
            Connection = connection;
            Context    = context;
            Config     = config;

            Type   type   = GetType();
            string prefix = RequestMethodNamePrefix;
            int    N      = prefix.Length;

            MethodInfo[] methods =
                type.GetMethods(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance)
                .Where(m => m.Name.StartsWith(prefix))
                .ToArray();

            foreach (MethodInfo m in methods)
            {
                ParameterInfo[] parameters = m.GetParameters();

                UIReqDelegate theDelegate = (object?[] args) => {
                    return((Task <ReqResult>)m.Invoke(this, args) !);
                };

                UiReqPara[] uiReqParameters = parameters.Select(MakeParameter).ToArray();

                string key = m.Name.Substring(N);
                mapUiReqMethods[key] = new UiReqMethod(theDelegate, uiReqParameters);
            }

            return(Task.FromResult(true));
        }
예제 #3
0
        public virtual async Task <ReqResult> OnUiRequestAsync(string command, JObject parameters)
        {
            if (mapUiReqMethods.ContainsKey(command))
            {
                UiReqMethod method = mapUiReqMethods[command];
                method.ResetValues();

                foreach (JProperty p in parameters.Properties())
                {
                    if (method.ParameterMap.ContainsKey(p.Name))
                    {
                        UiReqPara para = method.ParameterMap[p.Name];
                        para.Value = p.Value.ToObject(para.Type);
                    }
                }

                object?[] paramValues = method.Parameters.Select(p => p.Value).ToArray();
                return(await method.TheDelegate(paramValues));
            }

            return(ReqResult.Bad("Unknown command: " + command));
        }