// Copyright (c) 2026 GeWuYou // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. namespace GFramework.Game.Abstractions.Routing; /// /// 路由守卫接口,用于控制路由的进入和离开 /// /// 路由项类型 public interface IRouteGuard where TRoute : IRoute { /// /// 守卫优先级,数值越小优先级越高 /// /// /// 守卫按优先级从小到大依次执行。 /// 建议使用 0-100 的范围,默认为 50。 /// int Priority { get; } /// /// 是否可以中断后续守卫的执行 /// /// /// 如果为 true,当此守卫返回 true 或抛出异常时,将中断后续守卫的执行。 /// 如果为 false,将继续执行后续守卫。 /// bool CanInterrupt { get; } /// /// 检查是否可以进入指定路由 /// /// 路由键值 /// 路由上下文 /// 如果允许进入返回 true,否则返回 false ValueTask CanEnterAsync(string routeKey, IRouteContext? context); /// /// 检查是否可以离开指定路由 /// /// 路由键值 /// 如果允许离开返回 true,否则返回 false ValueTask CanLeaveAsync(string routeKey); }