Example #1
0
        public void Register(ContainerBuilder builder, IDistrictConfig config)
        {
            var connectionString = ((IConnectionDistrictConfig)config).ConnectionString;

            builder.Register <string>(c => connectionString)
            .Named <string>("ConnectionString");
        }
Example #2
0
        /// <summary>
        /// 验证token 默认是不验证
        /// </summary>
        /// <param name="config"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        protected virtual bool VerifyToken(IDistrictConfig config, IToken token)
        {
            //var signstr = $"{token.Did}{token.Rid}{token.Ts}{config.SecretKey}";

            //var isign = Utils.GetMd5(signstr);

            //return Equals(token.Sign, isign);

            return(true);
        }
Example #3
0
        public void SetUp(IContainer container, IDistrictConfig config)
        {
            var connectionString = ((IConnectionDistrictConfig)config).ConnectionString;

            if (container.IsRegistered <IDatabaseInitializer>())
            {
                //判断是否有更新 ?
                //更新数据库
                container.Resolve <IDatabaseInitializer>().Initialize(connectionString);
            }
        }
Example #4
0
        /// <summary>
        /// 验证token 默认是不验证
        /// </summary>
        /// <param name="config"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        protected virtual bool VerifyToken(IDistrictConfig config, IToken token)
        {
            var isign = $"{token.Did}{token.Rid}{token.Ts}{token.Uid}{config.SecretKey}".GetMD5();

            if (TimeUtil.GetTimestamp(DateTime.UtcNow) / 1000 - token.Ts >= 1000 * 60 * 60 * 5)//5h
            {
                return(false);
            }

            if (Equals(isign, token.Sign))
            {
                return(true);
            }

            return(false);
        }
Example #5
0
        public void Register(ContainerBuilder builder, IDistrictConfig config)
        {
            var redisConfig = (config as IRedisDistrictConfig);

            if (redisConfig == null)
            {
                return;
            }

            builder.Register(c => ConnectionMultiplexer.Connect(redisConfig.Redis))
            .SingleInstance()
            .AsSelf();

            builder.Register(c => c.Resolve <ConnectionMultiplexer>().GetDatabase(redisConfig.RedisDb))
            .As <IDatabase>()
            .InstancePerDependency();
        }
Example #6
0
        public void Execute(IDistrictContainer container, IDistrictConfig config)
        {
            if (Logger.IsDebugEnabled)
            {
                Logger.Debug($"TASK [{typeof(T).Name}] START!");
            }

            if (!Continue())
            {
                if (Logger.IsDebugEnabled)
                {
                    Logger.Debug($"{typeof(T).Name} NOT Continue!");
                }

                return;
            }

            SubJob(container, config);

            if (Logger.IsDebugEnabled)
            {
                Logger.Debug($"TASK [{typeof(T).Name}] DONE!");
            }
        }
Example #7
0
 protected abstract void SubJob(IDistrictContainer container, IDistrictConfig config);
Example #8
0
 public override IDatabaseFactory GetDistrictDatabaseFactory(IDistrictConfig config)
 {
     throw new NotImplementedException();
 }
Example #9
0
 public void SetUp(IContainer container, IDistrictConfig config)
 {
 }
Example #10
0
 protected override void SubJob(IDistrictContainer container, IDistrictConfig config)
 {
     Console.WriteLine(DateTime.UtcNow);
 }
Example #11
0
 protected override bool VerifyToken(IDistrictConfig config, IToken token)
 {
     return(true);
 }
Example #12
0
        private ILifetimeScope LoadDistrictContainer(IDistrictConfig districtConfig)
        {
            if (districtConfig == null)
            {
                return(null);
            }

            if (Log.IsTraceEnabled)
            {
                Log.Trace($"=========== Init district container\t{districtConfig.Id} ===========");
            }

            var configtypes = districtConfig.GetType().GetInterfaces();

            var builder = new ContainerBuilder();

            foreach (var type in configtypes)
            {
                var attrs = type.GetCustomAttributes(typeof(DistrictConfigRegisterAttribute), false);
                if (!attrs.Any())
                {
                    continue;
                }
                if (attrs[0] is DistrictConfigRegisterAttribute attr)
                {
                    ((IDistrictConfigRegister)Activator.CreateInstance(attr.RegisterType))
                    .Register(builder, districtConfig);
                }
            }

            builder.Register(c => ServerIoc.Resolve <IRedisSerializer>())
            .As <IRedisSerializer>()
            .SingleInstance();

            builder.Register(c => new SqlConnection(c.ResolveKeyed <string>(ConnectionStringName)))
            .As <IDbConnection>()
            .InstancePerDependency();

            builder.Register(c => new DefaultGameCache(c.Resolve <IRedisSerializer>(), c.Resolve <IDatabase>()))
            .As <IGameCache>()
            .InstancePerDependency();

            builder.Register(c => districtConfig)
            .As <IDistrictConfig>()
            .AsImplementedInterfaces()
            .SingleInstance();

            builder.Register(c => this)
            .As <IDistrictContainer>()
            .SingleInstance();

            builder.Register(c => GetConfigAssemblyList())
            .Keyed <List <Assembly> >("ConfigAssemblyList")
            .SingleInstance();

            builder.Register(c => GetServiceAssemblyList())
            .Keyed <List <Assembly> >("ServiceAssemblyList")
            .SingleInstance();

            if (ServerIoc.IsRegistered <IMessageBroadcast>())
            {
                builder.Register(c => ServerIoc.Resolve <IMessageBroadcast>())
                .As <IMessageBroadcast>()
                .SingleInstance();
            }
            else
            {
                builder.Register(c => new DefaultMessageBroadcast())
                .As <IMessageBroadcast>()
                .SingleInstance();
            }

            if (ServerIoc.IsRegistered <IPushService>())
            {
                builder.Register(c => ServerIoc.Resolve <IPushService>())
                .As <IPushService>()
                .SingleInstance();
            }

            InitDistrictRepository(builder);

            var services = GetServiceAssemblyList();

            if (services.Any())
            {
                services.ForEach(x =>
                {
                    foreach (var type in x.GetTypes())
                    {
                        if (type.IsInterface || type.IsAbstract || !typeof(IService).IsAssignableFrom(type))
                        {
                            continue;
                        }
                        builder.RegisterType(type)
                        //.Where(item => typeof(IService).IsAssignableFrom(item))
                        //.WithProperty("Test",123)
                        .PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies)
                        //.WithProperty(new ResolvedParameter((pi, context) => pi.Name == "Resolver", (pi, ctx) => ctx))
                        .AsSelf()
                        .SingleInstance();
                    }
                });
            }

            BuildDistrictContainer(builder);

            var container = builder.Build();

            foreach (var type in configtypes)
            {
                var attrs = type.GetCustomAttributes(typeof(DistrictConfigRegisterAttribute), false);
                if (!attrs.Any())
                {
                    continue;
                }
                if (attrs[0] is DistrictConfigRegisterAttribute attr)
                {
                    if (Log.IsTraceEnabled)
                    {
                        Log.Trace($"SetUp DistrictConfig -> {type.Name}");
                    }

                    ((IDistrictConfigRegister)Activator.CreateInstance(attr.RegisterType))
                    .SetUp(container, districtConfig);
                }
            }

            if (Log.IsTraceEnabled)
            {
                Log.Trace("");
            }

            return(container.BeginLifetimeScope());
        }