示例#1
0
        public async Task Raise(IPayload payload)
        {
            var handlers = config.Container
                           .Resolve <IEventHolder>()
                           .GetHandlers(payload);

            foreach (var handler in handlers)
            {
                using (var scope = config.Scope())
                {
                    scope.Register(payload.Data.GetType())
                    .ImplementedBy(c => payload.Data)
                    .As <Singleton>();

                    var container = scope.Container;

                    var instanse = container.Resolve(handler);
                    var @event   = container.Resolve(payload.Event);

                    await((Task)handler.InvokeMember(
                              "Execute",
                              BindingFlags.Instance | BindingFlags.Public | BindingFlags.InvokeMethod,
                              null,
                              instanse,
                              new[] { @event })).ConfigureAwait(false);
                }
            }
        }
示例#2
0
        public async Task Run()
        {
            var rootContainer = config.Container;

            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;

                using (var scope = config.Scope())
                {
                    scope.Register <IContainerConfig>()
                    .ImplementedBy(c => scope)
                    .As <Singleton>();

                    var container = scope.Container;

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

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

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

                    scope.Register <IConnection>()
                    .ImplementedBy(c => connection)
                    .As <Singleton>();
                }
            }
        }
        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>();
        }