示例#1
0
 public Listener(
     IListenerLogger logger,
     InlineSocketsOptions options,
     INetworkProvider networkProvider)
 {
     _logger          = logger;
     _options         = options;
     _networkProvider = networkProvider;
 }
 public SimpleListener(
     ISQS sqs,
     Func <Message, Task> messageHandler,
     CancellationToken ctx,
     IListenerLogger logger)
 {
     _sqs            = sqs;
     _messageHandler = messageHandler;
     _ctx            = ctx;
     _logger         = logger;
 }
示例#3
0
 public Transport(
     IListenerLogger logger,
     InlineSocketsOptions options,
     INetworkProvider networkProvider,
     IEndPointInformation endPointInformation,
     IConnectionDispatcher dispatcher)
 {
     _listener            = new Listener(logger, options, networkProvider);
     _logger              = logger;
     _endPointInformation = endPointInformation;
     _dispatcher          = dispatcher;
 }
示例#4
0
        public InlineSocketsOptionsDefaults(
            IListenerLogger listenerLogger,
            IConnectionLogger connectionLogger,
            INetworkProvider networkProvider)
        {
            _configure = options =>
            {
#if NETSTANDARD2_0
                var memoryPool = Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.Internal.KestrelMemoryPool.Create();
#else
                var socketTransportOptions         = new Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions();
                var socketTransportOptionsTypeInfo = socketTransportOptions.GetType().GetTypeInfo();
                var memoryPoolFactoryProperty      = socketTransportOptionsTypeInfo.GetDeclaredProperty("MemoryPoolFactory");
                var memoryPoolFactory = memoryPoolFactoryProperty.GetValue(socketTransportOptions) as Func <MemoryPool <byte> >;
                var memoryPool        = memoryPoolFactory.Invoke();
#endif

                options.MemoryPool             = memoryPool;
                options.CreateListener         = CreateListener;
                options.CreateConnection       = CreateConnection;
                options.CreateSocketPipelines  = CreateSocketPipelines;
                options.WrapTransportPipelines = WrapTransportPipelines;

                Listener CreateListener()
                {
                    return(new Listener(listenerLogger, options, networkProvider));
                }

                IConnection CreateConnection(INetworkSocket socket)
                {
                    return(new Connection(connectionLogger, options, socket));
                }

                (PipeReader input, PipeWriter output) CreateSocketPipelines(IConnection connection, INetworkSocket socket)
                {
                    var input  = new SocketPipeReader(connectionLogger, options, connection, socket);
                    var output = new SocketPipeWriter(connectionLogger, options, connection, socket);

                    return(input, output);
                }

                static IDuplexPipe WrapTransportPipelines(IConnection connection, IDuplexPipe transport)
                {
                    var input = new CancelNotificationPipeReader(transport.Input, connection.CancelPendingRead);

                    return(new DuplexPipe(input, transport.Output));
                }
            };
        }
        public TransportFactory(
            IListenerLogger logger,
            IOptions <InlineSocketsOptions> options,
            INetworkProvider networkProvider)
        {
            _create = Create;

            ITransport Create(
                IEndPointInformation endPointInformation,
                IConnectionDispatcher dispatcher)
            {
                return(new Transport(
                           logger,
                           options.Value,
                           networkProvider,
                           endPointInformation,
                           dispatcher));
            }
        }