public static DispatcherData Run(DispatcherData data)
        {
            var beforePipe = dicPipeLines.Values.Where(x => x.PipeType == PipeType.Before);
            var afterPipe  = dicPipeLines.Values.Where(x => x.PipeType == PipeType.After);

            foreach (IPipeLine pipeLine in beforePipe)
            {
                ResponseBase resp = pipeLine.Execute(data.Request);
                if (resp.IsSuccess)
                {
                    continue;
                }
                data.Response = resp;
                return(data);
            }

            Execute(data);

            foreach (IPipeLine pipeLine in afterPipe)
            {
                ResponseBase resp = pipeLine.Execute(data.Request);
                if (resp.IsSuccess)
                {
                    continue;
                }
                data.Response = resp;
                return(data);
            }

            return(data);
        }
        private static RequestBase GetRequestFromMessage(DispatcherData data)
        {
            var assembly = Assembly.Load(data.AssemblyName);

            Type requestType = assembly.GetTypes().FirstOrDefault(x => x.FullName == data.ClassName);
            var  requestObj  = JsonConvert.DeserializeObject(data.Message, requestType);

            return((RequestBase)requestObj);
        }
        public static void Execute(DispatcherData data)
        {
            string       applicationdDirectory = _configuration.GetValue <string>("ApplicationDirectory");
            var          assemly      = Assembly.Load(data.AssemblyName);
            Type         requestType  = assemly.GetTypes().FirstOrDefault(x => x.FullName == data.ClassName);
            AssemblyData assemblyData = ReflectionHelper.GetServerAssemblyData(requestType, applicationdDirectory);

            data.Response = ExecuteAction(assemblyData.Type, data.Request.MethodName, new object[1] {
                data.Request
            });
        }
        public static ResponseBase Dispatch(DispatcherData data)
        {
            ResponseBase returnData = null;

            try
            {
                if (data == null || string.IsNullOrEmpty(data.Message))
                {
                    return(returnData = new ResponseBase(null, false, "Request can not be empty!"));
                }

                data.Request = GetRequestFromMessage(data);

                var response = PipeManager.Run(data);

                returnData = response.Response;
            }
            catch (Exception exception)
            {
                returnData = new ResponseBase(null, false, exception.ToString());
            }

            return(returnData);
        }