Example #1
0
		/// <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();
			}
		}