Ejemplo n.º 1
0
        /// <summary>
        ///     调用
        /// </summary>
        internal async void Call()
        {
            if (!CheckCall())
            {
                return;
            }
            if (Data.HostName.Equals("Zero", StringComparison.OrdinalIgnoreCase))
            {
                var manager = new ZeroManager();
                manager.Command(Data);
                return;
            }

            // 1 初始化路由信息
            if (!FindHost() || Data.RouteHost.Failed)
            {
                Data.Status        = ZeroOperatorStatus.FormalError;
                Data.ResultMessage = ApiResult.NoFindJson;
                return;
            }

            // 2 安全检查
            if (!TokenCheck())
            {
                Data.Status        = ZeroOperatorStatus.DenyAccess;
                Data.ResultMessage = ApiResult.DenyAccessJson;
                return;
            }
            // 3 缓存快速处理
            if (RouteChahe.LoadCache(Data.Uri, Data.Token, out Data.CacheSetting, out Data.CacheKey, ref Data.ResultMessage))
            {
                //找到并返回缓存
                Data.Status = ZeroOperatorStatus.Success;
                return;
            }

            // 4 远程调用
            if (!Data.RouteHost.ByZero)
            {
                Data.ResultMessage = await CallHttp();
            }
            else if (ZeroApplication.ZerCenterIsRun)
            {
                Data.ResultMessage = CallZero();
            }
            else
            {
                Data.Status        = ZeroOperatorStatus.LocalError;
                Data.ResultMessage = ApiResult.NoReadyJson;
                return;
            }
            // 5 结果检查
            SecurityChecker.CheckResult(Data);
        }