예제 #1
0
        public ILogin GetLogin()
        {
            LoginElement loginSection = ZyGameBaseConfigManager.GetLogin();

            if (loginSection == null)
            {
                return(null);
            }

            RetailElement retail = loginSection.RetailList[retailID];

            object[] args     = new object[0];
            string   typeName = string.Empty;

            if (retail != null)
            {
                typeName = retail.TypeName;
                args     = GetArgs(retail.Args);
            }
            else
            {
                typeName = loginSection.DefaultTypeName;
                args     = GetArgs(defaultArgs);
            }
            return((ILogin)Activator.CreateInstance(Type.GetType(typeName), args));
        }
        /// <summary>
        /// The game service start.
        /// </summary>
        /// <param name="setting">Environment setting.</param>
        /// <param name="cacheSetting">Cache setting.</param>
        public static void Start(EnvironmentSetting setting, CacheSetting cacheSetting)
        {
            if (IsRunning)
            {
                return;
            }

            TraceLog.WriteLine("{0} Server is starting...", DateTime.Now.ToString("HH:mm:ss"));
            _setting = setting;
            if (!RedisConnectionPool.Ping("127.0.0.1"))
            {
                string error = string.Format("Error: NIC is not connected or no network.");
                TraceLog.WriteLine(error);
                TraceLog.WriteError(error);
                return;
            }
            RedisConnectionPool.Initialize(_setting.Serializer);
            if (!RedisConnectionPool.CheckConnect())
            {
                string error = string.Format("Error: the redis server is not started.");
                TraceLog.WriteLine(error);
                TraceLog.WriteError(error);
                return;
            }
            TraceLog.WriteLine("{0} Redis server connect successfully.", DateTime.Now.ToString("HH:mm:ss"));

            DbConnectionProvider.Initialize();
            TraceLog.WriteLine("{0} DB server connect successfully.", DateTime.Now.ToString("HH:mm:ss"));

            EntitySchemaSet.CacheGlobalPeriod = _setting.CacheGlobalPeriod;
            EntitySchemaSet.CacheUserPeriod   = _setting.CacheUserPeriod;
            if (_setting.EntityAssembly != null)
            {
                ProtoBufUtils.LoadProtobufType(_setting.EntityAssembly);
                EntitySchemaSet.LoadAssembly(_setting.EntityAssembly);
            }

            ZyGameBaseConfigManager.Intialize();
            //init script.
            if (_setting.ScriptSysAsmReferences.Length > 0)
            {
                ScriptEngines.AddSysReferencedAssembly(_setting.ScriptSysAsmReferences);
            }
            ScriptEngines.AddReferencedAssembly("ZyGames.Framework.Game.dll");
            if (_setting.ScriptAsmReferences.Length > 0)
            {
                ScriptEngines.AddReferencedAssembly(_setting.ScriptAsmReferences);
            }
            ScriptEngines.RegisterModelChangedBefore(OnModelChangeBefore);
            ScriptEngines.RegisterModelChangedAfter(OnModelChangeAtfer);
            ScriptEngines.OnLoaded += OnScriptLoaded;
            ScriptEngines.Initialize();
            Language.SetLang();
            CacheFactory.Initialize(cacheSetting, _setting.Serializer);
            EntitySchemaSet.StartCheckTableTimer();
            Global = new ContextCacheSet <CacheItem>("__gameenvironment_global");
        }
예제 #3
0
 protected void Application_Start(object sender, EventArgs e)
 {
     try
     {
         HandlerManager.Init(Assembly.GetExecutingAssembly());
         ZyGameBaseConfigManager.Intialize();
     }
     catch (Exception ex)
     {
         TraceLog.WriteError("Application_Start error:{0}", ex);
     }
 }
예제 #4
0
        /// <summary>
        /// Gets the login.
        /// </summary>
        /// <param name="retaiId"></param>
        /// <param name="obj">sdk json object of request or ActionGetter object</param>
        /// <returns></returns>
        public static ILogin GetLogin(string retaiId, object obj)
        {
            if (string.IsNullOrEmpty(retaiId))
            {
                return(null);
            }
            object[] args     = new object[0];
            string   typeName = string.Format("{0}.Sns.Login36you,{0}", "ZyGames.Framework.Game");

            bool hasRetail = false;

            if (ZyGameBaseConfigManager.GameSetting.HasSetting)
            {
                var loginSetting = ZyGameBaseConfigManager.GameSetting.GetLoginSetting(retaiId);
                if (loginSetting != null)
                {
                    typeName = loginSetting.TypeName.Contains(",")
                        ? loginSetting.TypeName
                        : string.Format("{0}.Sns.{1},{0}", "ZyGames.Framework.Game", loginSetting.TypeName);
                    args      = GetArgs(loginSetting.TypeArgs, obj);
                    hasRetail = true;
                }
            }
            else
            {
                var loginSection = ZyGameBaseConfigManager.GetLogin();
                if (loginSection != null)
                {
                    var retail = loginSection.RetailList[retaiId];
                    if (retail != null)
                    {
                        typeName = retail.TypeName.Contains(",")
                            ? retail.TypeName
                            : string.Format("{0}.Sns.{1},{0}", "ZyGames.Framework.Game", retail.TypeName);
                        args      = GetArgs(retail.Args, obj);
                        hasRetail = true;
                    }
                }
            }
            if (!hasRetail)
            {
                args = GetArgs(DefaultArgs, obj);
            }

            var type = Type.GetType(typeName, false, true);

            if (type == null)
            {
                return(null);
            }
            return(type.CreateInstance <ILogin>(args));
        }
예제 #5
0
        /// <summary>
        /// Gets the login.
        /// </summary>
        /// <returns>The login.</returns>
        public ILogin GetLogin()
        {
            object[] args     = new object[0];
            string   typeName = string.Format("{0}.Sns.Login36you,{0}", "ZyGames.Framework.Game");

            bool hasRetail = false;

            if (ZyGameBaseConfigManager.GameSetting.HasSetting)
            {
                var loginSetting = ZyGameBaseConfigManager.GameSetting.GetLoginSetting(retailID);
                if (loginSetting != null)
                {
                    typeName = loginSetting.TypeName.IndexOf(",") != -1
                        ? loginSetting.TypeName
                        : string.Format("{0}.Sns.{1},{0}", "ZyGames.Framework.Game", loginSetting.TypeName);
                    args      = GetArgs(loginSetting.TypeArgs);
                    hasRetail = true;
                }
            }
            else
            {
                var loginSection = ZyGameBaseConfigManager.GetLogin();
                if (loginSection != null)
                {
                    var retail = loginSection.RetailList[retailID];
                    if (retail != null)
                    {
                        typeName = retail.TypeName.IndexOf(",") != -1
                            ? retail.TypeName
                            : string.Format("{0}.Sns.{1},{0}", "ZyGames.Framework.Game", retail.TypeName);
                        args      = GetArgs(retail.Args);
                        hasRetail = true;
                    }
                }
            }
            if (!hasRetail)
            {
                args = GetArgs(defaultArgs);
            }

            var type = Type.GetType(typeName, false, true);

            if (type == null)
            {
                return(null);
            }
            return(type.CreateInstance <ILogin>(args));
        }
예제 #6
0
        /// <summary>
        /// The game service start.
        /// </summary>
        /// <param name="setting">Environment setting.</param>
        /// <param name="cacheSetting">Cache setting.</param>
        public static void Start(EnvironmentSetting setting, CacheSetting cacheSetting)
        {
            if (_isRunning == 1)
            {
                return;
            }

            _setting = setting;
            if (!RedisConnectionPool.CheckConnect())
            {
                string error = string.Format("Error: the redis server is not started.");
                Console.WriteLine(error);
                TraceLog.WriteError(error);
                return;
            }
            DbConnectionProvider.Initialize();
            EntitySchemaSet.CacheGlobalPeriod = _setting.CacheGlobalPeriod;
            EntitySchemaSet.CacheUserPeriod   = _setting.CacheUserPeriod;
            if (_setting.EntityAssembly != null)
            {
                ProtoBufUtils.LoadProtobufType(_setting.EntityAssembly);
                EntitySchemaSet.LoadAssembly(_setting.EntityAssembly);
            }
            EntitySchemaSet.StartCheckTableTimer();
            LoadGameEntitySchema();
            ZyGameBaseConfigManager.Intialize();
            //init script.
            if (_setting.ScriptSysAsmReferences.Length > 0)
            {
                ScriptEngines.AddSysReferencedAssembly(_setting.ScriptSysAsmReferences);
            }
            ScriptEngines.AddReferencedAssembly("ZyGames.Framework.Game.dll");
            if (_setting.ScriptAsmReferences.Length > 0)
            {
                ScriptEngines.AddReferencedAssembly(_setting.ScriptAsmReferences);
            }
            ScriptEngines.RegisterModelChangedBefore(OnModelChangeBefore);
            ScriptEngines.RegisterModelChangedAfter(OnModelChangeAtfer);
            ScriptEngines.Initialize();
            Language.SetLang();
            CacheFactory.Initialize(cacheSetting);
            Global = new ContextCacheSet <CacheItem>("__gameenvironment_global");
            Interlocked.Exchange(ref _isRunning, 1);
        }
예제 #7
0
 public static ICombatController Create()
 {
     if (controller == null)
     {
         lock (lockThis)
         {
             if (controller == null)
             {
                 controller = (ICombatController)Activator.CreateInstance(Type.GetType(ZyGameBaseConfigManager.GetCombat().TypeName));
             }
         }
     }
     return(controller);
 }