Exemplo n.º 1
0
        public void process(FawRequest _req, FawResponse _res)
        {
            try {
                object _obj = null;
                if (!m_method.IsStatic)
                {
                    var _jwt_obj = JWTManager.Check(_req.get_header("X-API-Key"));
                    _obj = m_auth_method.Invoke(null, new object [] { _jwt_obj });
                }
                //
                var _params = new object [m_params.Count];
                for (int i = 0; i < m_params.Count; ++i)
                {
                    if (m_params [i].Item1 != null)
                    {
                        _params [i] = _req.get_type_value(m_params [i].Item1, m_params [i].Item2);
                    }
                    else
                    {
                        switch (m_params [i].Item2)
                        {
                        case "FawRequest":
                            _params [i] = _req;
                            break;

                        case "FawResponse":
                            _params [i] = _res;
                            break;

                        case ":IP":
                            _params [i] = _req.m_ip;
                            break;

                        case ":AgentIP":
                            _params [i] = _req.m_agent_ip;
                            break;

                        case ":Option":
                            _params [i] = _req.m_option;
                            break;

                        default:
                            throw new Exception($"{m_name}: Request parameter types that are not currently supported");
                        }
                    }
                }
                var _ret = m_method.Invoke(_obj, _params);
                //if (_ret.GetType () == typeof (Task<>)) // 始终为False
                if (_ret is Task _t)
                {
                    if (_ret?.GetType() != typeof(Task))
                    {
                        //_ret = _ret.GetType ().InvokeMember ("Result", BindingFlags.GetProperty, null, _ret, null);
                        _ret = (_ret as dynamic).Result;
                    }
                    else
                    {
                        _t.Wait();
                        _ret = null;
                    }
                }
                if (m_jwt_type == "Gen")
                {
                    var(_o, _exp) = ((object, DateTime))_ret;
                    _ret          = JWTManager.Generate(_o, _exp);
                }
                if (!_res.has_data())
                {
                    if (_ret != null)
                    {
                        if (_ret is byte _byte)
                        {
                            _res.write(_byte);
                        }
                        else if (_ret is byte [] _bytes)
                        {
                            _res.write(_bytes);
                        }
                        else
                        {
                            string _content = (_ret.GetType().IsPrimitive ? _ret.to_str() : _ret.to_json());
                            object _o;
                            if (_content == "")
                            {
                                _o = new { result = "success" };
                            }
                            else if (_content[0] != '[' && _content[0] != '{')
                            {
                                _o = new { result = "success", content = _content };
                            }
                            else
                            {
                                _o = new { result = "success", content = JToken.Parse(_content) };
                            }
                            _res.write(_o.to_json());
                        }
                    }
                    else
                    {
                        _res.write(new { result = "success" }.to_json());
                    }
                }
            } catch (TargetInvocationException ex) {
                if (ex.InnerException != null && ex.InnerException?.GetType() == typeof(Exception))
                {
                    throw ex.InnerException;
                }
                throw ex;
            }
        }