コード例 #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 void Add <TEvent>()
            where TEvent : class, IEvent <object>
        {
            var @event = typeof(TEvent);

            if (!events.ContainsValue(@event))
            {
                config.Register <TEvent>();
                events.Add(GetHash(@event.Name), @event);
            }
        }
コード例 #3
0
        public void Add <TData, TCommand>()
            where TCommand : ICommand <TData>
        {
            var command = typeof(TCommand);

            for (var i = 0; i < commands.Count; i++)
            {
                if (commands[i].CommandType == command)
                {
                    return;
                }
            }

            config.Register <TCommand>();
            commands.Add(new CommandDto(GetHash(command.Name), command));
        }
コード例 #4
0
 public void UseEncryption <TEncryption>()
     where TEncryption : IEncryption
 {
     config.Register <IEncryption>()
     .ImplementedBy <TEncryption>()
     .As <Singleton>();
 }
コード例 #5
0
        public SerializerConfig()
        {
            config = new ContainerConfig();

            config.Register <IActivator>()
            .ImplementedBy(c => new ActivatorConfig().Create())
            .As <Singleton>();

            var innerScope = config.CreateScope();

            converterContainer = new ConverterContainer(innerScope);

            Match <byte>().With <Core.ByteConverter>();
            Match <sbyte>().With <SByteConverter>();
            Match <short>().With <ShortConverter>();
            Match <ushort>().With <UShortConverter>();
            Match <int>().With <Int32Converter>();
            Match <uint>().With <UInt32Converter>();
            Match <long>().With <Int64Converter>();
            Match <ulong>().With <UInt64Converter>();
            Match <string>().With <StringConverter>();
            Match <bool>().With <BoolConverter>();
            Match <float>().With <SingleConverter>();
            Match <double>().With <DoubleConverter>();
            Match <DateTime>().With <DateTimeConverter>();
            Match <Array>().With <ArrayConverter>();
            Match <IList>().With <IListConverter>();
            Match <ICollection>().With <CollectionConverter>();
            Match <IEnumerable>().With <IEnumerableConverter>();
            Match <Guid>().With <GuidConverter>();

            config             = innerScope;
            converterContainer = new ConverterContainer(config, converterContainer);
        }
コード例 #6
0
        public void With <TConverter>()
            where TConverter : IConverter <TData>
        {
            converters.RegisterConverterTypeFor(typeof(TData), typeof(TConverter));

            scope.Register <TConverter>()
            .As <Singleton>();
        }
コード例 #7
0
        public ICompressionBuilder UseSerializer <TSerializer>()
            where TSerializer : ISerializer
        {
            config.Register <ISerializer>()
            .ImplementedBy <TSerializer>()
            .As <Singleton>();

            return(new CompressionBuilder(config));
        }
コード例 #8
0
        public IEncryptionBuilder UseCompression <TCompression>()
            where TCompression : ICompression
        {
            config.Register <ICompression>()
            .ImplementedBy <TCompression>()
            .As <Singleton>();

            return(new EncryptionBuilder(config));
        }
コード例 #9
0
        public void Add <TData, TCommand, THandler>()
            where TCommand : ICommand <TData>
            where THandler : IHandler <TData, TCommand>
        {
            var command = typeof(TCommand);
            var handler = typeof(THandler);

            if (handlers.TryGetValue(command, out var list))
            {
                list.Add(new HandlerDto(handler));
            }
            else
            {
                config.Register <THandler>();
                handlers.Add(command, new List <IHandlerDto> {
                    new HandlerDto(handler)
                });
            }
        }
コード例 #10
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);
        }
コード例 #11
0
        public Connection(IContainerConfig config)
        {
            config.Register <IPacketsComposer>()
            .ImplementedBy <PacketsComposer>()
            .As <Singleton>();

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

            config.Register <IEventRaiser>()
            .ImplementedBy <EventRaiser>()
            .As <Singleton>();

            config.Register <ICommunicator>()
            .ImplementedBy <Communicator>()
            .As <Singleton>();

            container = config.Container;

            Task.Run(async() => await ReceiveLoop());
        }
コード例 #12
0
        protected ApplicationConfig()
        {
            var rootConfig = new ContainerConfig();

            rootConfig.Register <ISerializerConfig>()
            .ImplementedBy(c => new SerializerConfig())
            .As <Singleton>();

            rootConfig.Register <ISerializer>()
            .ImplementedBy(c => c.Resolve <ISerializerConfig>().Create())
            .As <Singleton>();

            rootConfig.Register <IArrayPool>()
            .ImplementedBy(c => new ArrayPoolConfig().Create())
            .As <Singleton>();

            rootConfig.Register <ICompression>()
            .ImplementedBy <Compression>()
            .As <Singleton>();

            rootConfig.Register <IEncryption>()
            .ImplementedBy <Encryption>()
            .As <Singleton>();

            rootConfig.Register <IConnection>()
            .ImplementedBy <Connection>()
            .As <Transient>();

            rootConfig.Register <CommandCollection>()
            .ImplementedBy <CommandCollection>()
            .As <Singleton>();

            rootConfig.Register <HandlerCollection>()
            .ImplementedBy <HandlerCollection>()
            .As <Singleton>();

            rootConfig.Register <ICommandHolder>()
            .ImplementedBy <CommandHolder>()
            .As <Singleton>();

            rootConfig.Register <Disconnect>();
            rootConfig.Register <Connect>();
            rootConfig.Register <Error>();

            config = rootConfig.CreateScope();

            config.Register <IContainerConfig>()
            .ImplementedBy(c => config)
            .As <Singleton>();
        }
コード例 #13
0
        protected NodeConfig()
        {
            rootConfig.Register <ISerializer>()
            .ImplementedBy <Serializer>()
            .As <Singleton>();

            rootConfig.Register <ICompression>()
            .ImplementedBy <Compression>()
            .As <Singleton>();

            rootConfig.Register <IEncryption>()
            .ImplementedBy <Encryption>()
            .As <Singleton>();

            rootConfig.Register <IConnection>()
            .ImplementedBy <Connection>()
            .As <Transient>();

            rootConfig.Register <EventCollection>()
            .ImplementedBy <EventCollection>()
            .As <Singleton>();

            rootConfig.Register <HandlerCollection>()
            .ImplementedBy <HandlerCollection>()
            .As <Singleton>();

            rootConfig.Register <IEventHolder>()
            .ImplementedBy <EventHolder>()
            .As <Singleton>();

            rootConfig.Register <Disconnect>();
            rootConfig.Register <Error>();

            Config = rootConfig.Scope();

            Config.Register <IContainerConfig>()
            .ImplementedBy(c => Config)
            .As <Singleton>();
        }
コード例 #14
0
        public ICompressionBuilder UseSerializer <TSerializer>(TSerializer serializer = default)
            where TSerializer : ISerializer
        {
            var registry = config.Register <ISerializer>();

            if (serializer == null)
            {
                registry.ImplementedBy <TSerializer>().As <Singleton>();
            }
            else
            {
                var serializerClosure = serializer;
                registry.ImplementedBy(c => serializerClosure).As <Singleton>();
            }

            return(new CompressionBuilder(config));
        }
コード例 #15
0
        public void Add <TEvent, THandler>()
            where TEvent : class, IEvent <object>
            where THandler : class, IHandler <TEvent>
        {
            var @event  = typeof(TEvent);
            var handler = typeof(THandler);

            if (handlers.TryGetValue(@event, out var list))
            {
                list.Add(handler);
            }
            else
            {
                config.Register <THandler>();
                handlers.Add(@event, new List <Type> {
                    handler
                });
            }
        }
コード例 #16
0
 public ImplementedByBuilder <TRegistry> Register <TRegistry>()
 {
     return(config.Register <TRegistry>());
 }
コード例 #17
0
 public IImplementedByBuilder <TRegister> Register <TRegister>()
     where TRegister : class
 {
     return(Config.Register <TRegister>());
 }