Example #1
0
        /// <summary>
        /// 添加多个服务器
        /// </summary>
        /// <param name="name">服务器名</param>
        /// <param name="comment">服务器描述</param>
        /// <param name="ipAddress">IP地址</param>
        /// <param name="gameDir">游戏目录</param>
        /// <param name="group">服务器组</param>
        public bool AddGameServers(
            IList<object[]> para
        )
        {
            IList<GameServer> gameServers = new List<GameServer>();
            IBlazeDatabase db = null;
            try
            {
                db = DbFactory.GetDatabase();
                db.BeginTrans();

                foreach (object[] strPara in para)
                {
                    string name = ((string)strPara[0]).ToString();
                    string comment = ((string)strPara[1]).ToString();
                    string ipAddress = ((string)strPara[2]).ToString();
                    string gameDir = ((string)strPara[3]).ToString();
                    ServerGroup group = (ServerGroup)strPara[4];
                    GameServer.ConfigGuardState configState = (GameServer.ConfigGuardState)strPara[5];
                    string cfgContent = ((string)strPara[6]).ToString();
                    GameServer.ServerType serverType = (GameServer.ServerType)strPara[7];

                    SecurityManager sm = AdminServer.TheInstance.SecurityManager;

                    //构造相关安全对象
                    string newGameServerObjPath = group.SecurityObject.FullPath + SecurityManager.ObjectPathDelimiter + name;
                    FSEyeObject newGameServerObj = sm.Get(newGameServerObjPath, db);
                    newGameServerObj.Comment = comment;
                    sm.Set(newGameServerObj);
                    sm.Get(newGameServerObjPath + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.Console, db);
                    sm.Get(newGameServerObjPath + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.ServerInfo, db);
                    sm.Get(newGameServerObjPath + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.ServerInfo + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.PlugIn, db);
                    sm.Get(newGameServerObjPath + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.ServerInfo + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.Process, db);
                    sm.Get(newGameServerObjPath + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.ServerInfo + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.NetCard, db);
                    sm.Get(newGameServerObjPath + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.ServerInfo + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.BasicInfo, db);
                    sm.Get(newGameServerObjPath + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.ServerInfo + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.Cpu, db);
                    sm.Get(newGameServerObjPath + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.ServerInfo + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.Disk, db);
                    sm.Get(newGameServerObjPath + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.ServerInfo + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.FMTask, db);
                    sm.Get(newGameServerObjPath + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.ServerInfo + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.Memory, db);

                    //插入数据到服务器表
                    string[] fields = new string[] { 
					TableString.GameServerFieldId,
					TableString.GameServerFieldNetAddress,
					TableString.GameServerFieldGameDir,
					TableString.GameServerFieldHasBeenConfigGuard,
					TableString.GameServerFieldServerType,
                    TableString.GameServerFieldCfgString
				};

                    object[] values = new object[] {
					newGameServerObj.Id,
					ipAddress,
					gameDir,
					(int)configState,
					(int)serverType,
                    cfgContent
				};
                    IBlazeTable serverTable = db.GetTable(TableString.GameServerTableName);
                    serverTable.Add(fields, values);

                    GameServer server = new GameServer();
                    server.SecurityObject = newGameServerObj;
                    server.IpAddress = ipAddress;
                    server.GameDir = gameDir;
                    server.ConfigState = configState;
                    server.Type = serverType;
                    server.ConfigContent = cfgContent;                    
                    group.AddGameServer(server, db);

                    //如果group的Type是Group必须将其变为Server型的
                    if (group.GroupType == ServerGroup.Type.Group)
                    {
                        group.GroupType = ServerGroup.Type.Server;
                        IBlazeTable serverGroupTable = db.GetTable(TableString.ServerGroupTableName);
                        serverGroupTable.Set(TableString.ServerGroupFieldType, (int)group.GroupType, FilterFactory.CreateEqualFilter(TableString.ServerGroupFieldId, group.Id));
                    }

                    //加入默认权限,即其直接父亲的权限
                    AdminServer.TheInstance.SecurityManager.CopyAce(newGameServerObj.Parent, newGameServerObj, true);
                    
                    gameServers.Add(server);                                       
                }
                db.CommitTrans();
                foreach(GameServer server in gameServers)
                {
                _gameServerList.Add(server); 
                server.Initialize();
                _systemTickTimer.Elapsed += new System.Timers.ElapsedEventHandler(server.OnTick);
                }
                

                return true;
            }
            catch (Exception)
            {
                if (db != null)
                    db.RollbackTrans();
            }
            finally
            {
                if (db != null)
                    db.Close();
            }
            return false;
        }
Example #2
0
		/// <summary>
		/// 载入游戏服务器
		/// </summary>
		private void LoadGameServers()
		{
			lock (this)
			{
				IBlazeDatabase db = null;
				try
				{
					db = DbFactory.GetDatabase();
					IBlazeTable table = db.GetTable(TableString.GameServerTableName);					

					DataSet data = new DataSet();
					table.Get(data);
					DataRowCollection rows = data.Tables[TableString.GameServerTableName].Rows;
					for (int i = 0; i < rows.Count; i++)
					{
						DataRow row = rows[i];
						int serverId = (int)row[TableString.GameServerFieldId];
						string serverNetAddress = row[TableString.GameServerFieldNetAddress] as string;
						string gameDir = row[TableString.GameServerFieldGameDir] as string;
                        string configcontent = row[TableString.GameServerFieldCfgString] as string;
                        int ftpServer = (int)row[TableString.GameServerFieldFtpDownloadServer];
						GameServer.ConfigGuardState configState = (GameServer.ConfigGuardState)row[TableString.GameServerFieldHasBeenConfigGuard];
						GameServer.ServerType serverType = (GameServer.ServerType)row[TableString.GameServerFieldServerType];
												
						FSEyeObject serverObj = AdminServer.TheInstance.SecurityManager.Get(serverId);
						if (serverObj != null)
						{
							GameServer server = new GameServer();
							server.SecurityObject = serverObj;
							server.IpAddress = serverNetAddress;
							server.GameDir = gameDir;
							server.ConfigState = configState;
							server.Type = serverType;
                            server.ConfigContent = configcontent;
                            server.FtpServer = ftpServer;

                            //取得gmc_ip
                            string GMCIp = row[TableString.GameServerFieldGmcIp] as string;
                            if ((GMCIp != null) && (GMCIp.Length != 0))
                            {
                                server.LordConfig.GMCIp = GMCIp;
                            }
                            
                            //取得gmc_account
                            string GMCAccount = row[TableString.GameServerFieldGmcAccount] as string;
                            if ((GMCAccount != null) && (GMCAccount.Length != 0))
                            {
                                server.LordConfig.GMCAccount = GMCAccount;
                            }

                            try
                            {
                                server.LordConfig.FSEyeIp = (string)row[TableString.GameServerFieldFSEyeIp];
                                server.LordConfig.FSEyePort = (int)row[TableString.GameServerFieldFSEyePort];
                            }
                            catch (Exception)
                            { }

                            try
                            {
                                server.LordConfig.PaysysIp = (string)row[TableString.GameServerFieldPaysysIp];
                                server.LordConfig.PaysysPort = (int)row[TableString.GameServerFieldPaysysPort];
                                server.LordConfig.PaysysLoginName = (string)row[TableString.GameServerFieldPaysysLoginName];
                                server.LordConfig.PaysysLoginPwd = (string)row[TableString.GameServerFieldPaysysLoginPwd];
                            }
                            catch (Exception)
                            { }

                            try
                            {
								server.LordConfig.DbHost = (string)row[TableString.GameServerFieldDbHost];
								server.LordConfig.DbName = (string)row[TableString.GameServerFieldDbName];
								server.LordConfig.DbLoginName = (string)row[TableString.GameServerFieldDbLoginName];
								server.LordConfig.DbLoginPwd = (string)row[TableString.GameServerFieldDbLoginPwd];
								server.LordConfig.DbBackupPath = (string)row[TableString.GameServerFieldDbBackupDir];
							}
							catch (Exception)
							{
							}
                            server.LordConfig.BindIp = server.IpAddress;
							
							server.Initialize();
							server.GameStateChanged += new GameStateChangeEventHandler(GameStateChanged);
							_systemTickTimer.Elapsed += new System.Timers.ElapsedEventHandler(server.OnTick);
							_gameServerList.Add(server);
						}
					}					
				}
				catch (Exception ex)
				{
					throw ex;
				}
				finally
				{
					if (db != null)
					{
						db.Close();
					}
				}
			}
		}
Example #3
0
		/// <summary>
		/// 添加游戏服务器
		/// </summary>
		/// <param name="name">服务器名</param>
		/// <param name="comment">服务器描述</param>
		/// <param name="ipAddress">IP地址</param>
		/// <param name="macAddress">MAC地址</param>
		/// <param name="gameDir">游戏目录</param>
		/// <param name="group">服务器组</param>
		public bool AddGameServer(
			string name,
			string comment,
			string ipAddress,
			string gameDir,
			ServerGroup group,
			GameServer.ConfigGuardState configState,
			//bool hasBeenConfigGuard,
            string cfgContent,
			GameServer.ServerType serverType,
            int ftpServer
		)
		{
			if (name == null)
				throw new ArgumentNullException("name");
			if (comment == null)
				throw new ArgumentNullException("comment");
			if (ipAddress == null)
				throw new ArgumentNullException("ipAddress");
			if (gameDir == null)
				throw new ArgumentNullException("gameDir");
			if (group == null)
				throw new ArgumentNullException("group");
            if (cfgContent == null)
                throw new ArgumentNullException("cfgContent");
			IBlazeDatabase db = null;
			try
			{
				db = DbFactory.GetDatabase();
				db.BeginTrans();

				SecurityManager sm = AdminServer.TheInstance.SecurityManager;

				//构造相关安全对象
				string newGameServerObjPath = group.SecurityObject.FullPath + SecurityManager.ObjectPathDelimiter + name;
				FSEyeObject newGameServerObj = sm.Get(newGameServerObjPath, db);
				newGameServerObj.Comment = comment;
				sm.Set(newGameServerObj);
                
                //2008-07-16 为了改善性能和简化权限配置,不再生成这些object了
                //sm.Get(newGameServerObjPath + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.Console, db);
                //sm.Get(newGameServerObjPath + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.ServerInfo, db);				
                //sm.Get(newGameServerObjPath + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.ServerInfo + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.PlugIn, db);
                //sm.Get(newGameServerObjPath + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.ServerInfo + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.Process, db);
                //sm.Get(newGameServerObjPath + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.ServerInfo + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.NetCard, db);
                //sm.Get(newGameServerObjPath + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.ServerInfo + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.BasicInfo, db);
                //sm.Get(newGameServerObjPath + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.ServerInfo + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.Cpu, db);
                //sm.Get(newGameServerObjPath + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.ServerInfo + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.Disk, db);
                //sm.Get(newGameServerObjPath + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.ServerInfo + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.FMTask, db);
                //sm.Get(newGameServerObjPath + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.ServerInfo + SecurityManager.ObjectPathDelimiter + PredefinedSecurityObjects.Memory, db);
				
				//插入数据到服务器表
				string[] fields = new string[] { 
					TableString.GameServerFieldId,
					TableString.GameServerFieldNetAddress,
					TableString.GameServerFieldGameDir,
					TableString.GameServerFieldHasBeenConfigGuard,
					TableString.GameServerFieldServerType,
                    TableString.GameServerFieldCfgString,
                    TableString.GameServerFieldFtpDownloadServer
				};
                
				object[] values = new object[] {
					newGameServerObj.Id,
					ipAddress,
					gameDir,
					(int)configState,
					(int)serverType,
                    cfgContent,
                    ftpServer
				};
				IBlazeTable serverTable = db.GetTable(TableString.GameServerTableName);
				serverTable.Add(fields, values);

				GameServer server = new GameServer();
				server.SecurityObject = newGameServerObj;
				server.IpAddress = ipAddress;
				server.GameDir = gameDir;
				server.ConfigState = configState;
				server.Type = serverType;
                server.ConfigContent = cfgContent;
                server.FtpServer = ftpServer;
                server.GameServiceState = GameServer.ServiceState.OKStopped;
				group.AddGameServer(server, db);

                //如果group的Type是Group必须将其变为Server型的
                if (group.GroupType == ServerGroup.Type.Group)
                {
                    group.GroupType = ServerGroup.Type.Server;
                    IBlazeTable serverGroupTable = db.GetTable(TableString.ServerGroupTableName);
                    serverGroupTable.Set(TableString.ServerGroupFieldType, (int)group.GroupType, FilterFactory.CreateEqualFilter(TableString.ServerGroupFieldId, group.Id));
                }

                /*2008-07-16 GameServer的权限不再单独控制,而是统一由GameServerManager控制,所以就不再复制父一级的权限过来了。
                 * 
                 * 
                //加入默认权限,即其直接父亲的权限
                AdminServer.TheInstance.SecurityManager.CopyAce(newGameServerObj.Parent, newGameServerObj, true);
                 */

				db.CommitTrans();

				_gameServerList.Add(server);
				server.Initialize();
				_systemTickTimer.Elapsed += new System.Timers.ElapsedEventHandler(server.OnTick);

				return true;
			}
			catch (Exception)
			{
				if (db != null)
					db.RollbackTrans();
			}
			finally
			{
				if (db != null)
					db.Close();
			}

			return false;
		}