/// <summary> /// 删除游戏服务器 /// </summary> /// <param name="id">服务器编号</param> public bool DeleteGameServer(GameServer server) { if (server == null) throw new ArgumentNullException("server"); IBlazeDatabase db = null; try { db = DbFactory.GetDatabase(); db.BeginTrans(); ServerGroup group = server.Group; if (group != null) { group.DeleteGameServer(server, db); //如果该server所在的group没有server了就把组设为Group型的 if (group.SecurityObject.Children.Length == 0) { group.GroupType = ServerGroup.Type.Group; db.GetTable(TableString.ServerGroupTableName).Set(TableString.ServerGroupFieldType, (int)group.GroupType, FilterFactory.CreateEqualFilter(TableString.ServerGroupFieldId, group.Id)); } } IBlazeTable serverTable = db.GetTable(TableString.GameServerTableName); serverTable.Delete(FilterFactory.CreateEqualFilter(TableString.GameServerFieldId, server.Id)); //继续删除GaveServer的插件 serverTable = db.GetTable(TableString.ServerPlugInTableName); serverTable.Delete(FilterFactory.CreateEqualFilter(TableString.ServerPlugInFieldGameServerId, server.Id)); SecurityManager sm = AdminServer.TheInstance.SecurityManager; sm.Delete(server.Id, db); db.CommitTrans(); _gameServerList.Remove(server); _systemTickTimer.Elapsed -= new System.Timers.ElapsedEventHandler(server.OnTick); server.Dispose(); return true; } catch (Exception ex) { if (db != null) db.RollbackTrans(); throw ex; } finally { if (db != null) db.Close(); } }