示例#1
0
        public async Task <IConnection> Connect()
        {
            var tcpClient = new TcpClient
            {
                NoDelay           = true,
                ReceiveTimeout    = 0,
                SendTimeout       = 0,
                ReceiveBufferSize = 256,
                SendBufferSize    = 256
            };

            config.Register <TcpClient>()
            .ImplementedBy(c => tcpClient)
            .As <Singleton>();

            var container = config.Create();

            config.Register <IContainer>()
            .ImplementedBy(c => c)
            .As <Singleton>();

            var connection = container.Resolve <IConnection>();

            config.Register <IConnection>()
            .ImplementedBy(c => connection)
            .As <Singleton>();

            var communicator = container.Resolve <ITransport>();

            await communicator.Connect().ConfigureAwait(false);

            return(connection);
        }
示例#2
0
        public HandlerBuilder <TData, TCommand> Call <THandler>()
            where THandler : IHandler <TData, TCommand>
        {
            using (var container = config.Create())
            {
                container.Resolve <ISerializerConfig>()
                .Match <TData>();

                container.Resolve <CommandCollection>()
                .Add <TData, TCommand>();

                container.Resolve <HandlerCollection>()
                .Add <TData, TCommand, THandler>();

                return(this);
            }
        }
        public CommandRaiser(IContainerConfig config)
        {
            this.config = config;

            using (var container = config.Create())
            {
                commandHolder = container.Resolve <ICommandHolder>();
            }
        }
示例#4
0
        public ConverterDto TryGetDto(Type type)
        {
            var converterDto = TryGetDtoRecursive(type);

            if (converterDto != null)
            {
                if (converterDto.Converter == null && converterDto.ConverterType != null)
                {
                    using (var container = config.Create())
                    {
                        converterDto.Converter = (IConverter)container.Resolve(converterDto.ConverterType);
                    }
                }
            }

            return(converterDto);
        }
        public async Task Run()
        {
            using (var rootContainer = config.Create())
            {
                var configuration = rootContainer.Resolve <IConfiguration>();

                var tcpListener = new TcpListener(new IPEndPoint(IPAddress.Parse(configuration.Host), configuration.Port));
                tcpListener.Start();

                while (true)
                {
                    var tcpClient = await tcpListener.AcceptTcpClientAsync().ConfigureAwait(false);

                    tcpClient.NoDelay           = true;
                    tcpClient.ReceiveTimeout    = 0;
                    tcpClient.SendTimeout       = 0;
                    tcpClient.ReceiveBufferSize = 256;
                    tcpClient.SendBufferSize    = 256;

                    var scope = config.CreateScope();

                    scope.Register <IContainerConfig>()
                    .ImplementedBy(c => scope)
                    .As <Singleton>();

                    var container = scope.Create();

                    scope.Register <IContainer>()
                    .ImplementedBy(c => c)
                    .As <Singleton>();

                    scope.Register <TcpClient>()
                    .ImplementedBy(c => tcpClient)
                    .As <Singleton>();

                    var connection = container.Resolve <IConnection>();

                    scope.Register <IConnection>()
                    .ImplementedBy(c => connection)
                    .As <Singleton>();
                }
            }
        }
示例#6
0
        public Connection(IContainerConfig config)
        {
            config.Register <IPacketsComposer>()
            .ImplementedBy <PacketsComposer>()
            .As <Singleton>();

            config.Register <IMessageComposer>()
            .ImplementedBy <MessageComposer>()
            .As <Singleton>();

            config.Register <ICommandRaiser>()
            .ImplementedBy <CommandRaiser>()
            .As <Singleton>();

            config.Register <ITransport>()
            .ImplementedBy <Transport>()
            .As <Singleton>();

            container = config.Create();

            receiveLoopTask = Task.Run(ReceiveLoop);
        }