using Fantasy; using Fantasy.Async; using Fantasy.Network; using NB.Game; namespace NB.Gate; public static class GateLoginHelper { /// /// 网关通知其他服务器上线 /// /// /// public static async FTask Online(GateUnit gateUnit) { if (gateUnit == null) { return ErrorCode.ErrArgs; } Session session = gateUnit.Session; if (session == null) { return ErrorCode.ErrArgs; } var gateUnitSessionComponent = session.GetComponent(); if (gateUnitSessionComponent == null) { gateUnitSessionComponent = session.AddComponent(); } var routeComponent = session.GetComponent(); if (routeComponent == null) { routeComponent = session.AddComponent(); } gateUnitSessionComponent.AccountID = gateUnit.AccountID; //安排服务器,并通知进入 var gameSceneConfig = GameSceneHelper.GetSceneConfig(session); var gameRouteId = gameSceneConfig.RouteId; //连接到游戏中心服 var gameResponse = (Game2G_EnterResponse)await session.Scene.NetworkMessagingComponent.CallInnerRoute( gameRouteId, new G2Game_EnterRequest() { AccountId = gateUnit.AccountID, GateRouteId = session.RuntimeId }); if (gameResponse.ErrorCode != 0) { return ErrorCode.OnlineSceneFailed; } routeComponent.AddAddress(RouteType.GameRoute, gameResponse.RoleRouteId); gateUnit.GameSceneRouteId = gameRouteId; return ErrorCode.Successful; } /// /// 网关通知其他服务器下线 /// /// /// public static async FTask Offline(GateUnit gateUnit) { //通知服务器下线 return ErrorCode.Successful; } }