Exemple #1
0
        public void Initialize()
        {
            //Stop-Service -DisplayName 'Docker Desktop Service'
            //Stop-Service -DisplayName 'Internet Connection Sharing (ICS)'

            var ActivatorMiddlewareResolver = new ActivatorMiddlewareResolver();
            var ProxyResponsibilityChain    = new ServerResponsibilityChain(ActivatorMiddlewareResolver);

            Server = new SimpleServer(ProxyResponsibilityChain);
        }
Exemple #2
0
        public async Task RunAsync()
        {
            var ActivatorMiddlewareResolver = new ActivatorMiddlewareResolver();
            var ProxyResponsibilityChain    = new ServerResponsibilityChain(ActivatorMiddlewareResolver);

            ResponseMessage = await ProxyResponsibilityChain.Execute(RequestMessage);

            Assert.AreEqual(ID, ResponseMessage.ID);
            Assert.IsNotNull(ResponseMessage.Questions);
            Assert.IsNotNull(ResponseMessage.Answers);
            Assert.IsInstanceOfType(ResponseMessage.Answers.First().Record, typeof(DNS.Records.A));
        }
Exemple #3
0
        public static IPipelineBuilder UseMiddleware(
            this IPipelineBuilder pipeline,
            [DynamicallyAccessedMembers(MiddlewareAccessibility)] Type middleware)
        {
            if (!typeof(IMiddleware).IsAssignableFrom(middleware))
            {
                throw new ArgumentException($"The middleware type must implement \"{typeof(IMiddleware)}\".");
            }

            var        methods      = middleware.GetMethods(BindingFlags.Instance | BindingFlags.Public);
            MethodInfo invokeMethod = null;

            foreach (var method in methods)
            {
                if (string.Equals(method.Name, InvokeAsyncMethodName, StringComparison.Ordinal))
                {
                    if (method == null)
                    {
                        throw new InvalidOperationException(InvokeAsyncMethodName);
                    }
                    invokeMethod = method;
                    break;
                }
            }

            if (invokeMethod is null)
            {
                throw new InvalidOperationException("No suitable method matched .");
            }

            if (!typeof(Task).IsAssignableFrom(invokeMethod.ReturnType))
            {
                throw new InvalidOperationException($"The method is not an awaitable method { nameof(Task) } !");
            }

            var parameters = invokeMethod.GetParameters();

            if (parameters.Length == 0 || parameters[0].ParameterType != typeof(BaseContext))
            {
                throw new InvalidOperationException($" The method parameter does not contain an { nameof(BaseContext) } type parameter !");
            }

            return(pipeline.Use(((IMiddleware)ActivatorMiddlewareResolver.Resolve(middleware))));
        }
Exemple #4
0
        static async Task Main(string[] args)
        {
            try
            {
                var ActivatorMiddlewareResolver = new ActivatorMiddlewareResolver();
                var ServerResponsibilityChain   = new ServerResponsibilityChain(ActivatorMiddlewareResolver);
                var Server = new ProxyServer(ServerResponsibilityChain);
                Server.Started   += Server_Started;
                Server.Requested += Server_Requested;
                Server.Resolved  += Server_Resolved;
                Server.Responded += Server_Responded;
                Server.Error     += Server_Error;
                Server.Stopped   += Server_Stopped;
                await Server.StartAsync(new CancellationToken());

                Console.ReadLine();
            }
            catch (Exception e)
            {
                Log.Fatal(e, "Server Died");
                Console.ReadLine();
            }
        }