/// <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; }
/// <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(); } } } }
/// <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; }