完成离线消息发送和上线获取离线消息
This commit is contained in:
@@ -15,14 +15,34 @@ public class Chat2G_ChatMessageHandler : Route<Scene, Chat2G_ChatMessage>
|
||||
{
|
||||
Message = message.Message,
|
||||
};
|
||||
|
||||
var idList = message.IdList;
|
||||
bool isAll = !(idList != null && idList.Count > 0);
|
||||
|
||||
var gateUnitManage = scene.GetComponent<GateUnitManageComponent>();
|
||||
|
||||
foreach (var session in gateUnitManage.ForEachUnitSession())
|
||||
if (isAll)
|
||||
{
|
||||
session.Send(chatMessage);
|
||||
foreach (var session in gateUnitManage.ForEachUnitSession())
|
||||
{
|
||||
session.Send(chatMessage);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (idList == null) return;
|
||||
foreach (var (_, gateUnit) in gateUnitManage.Units)
|
||||
{
|
||||
if (gateUnit.AccountID > 0 && idList.Contains(gateUnit.AccountID))
|
||||
{
|
||||
Session session = gateUnit.Session;
|
||||
if (session != null)
|
||||
{
|
||||
session.Send(chatMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
await FTask.CompletedTask;
|
||||
}
|
||||
|
||||
@@ -29,10 +29,8 @@ public sealed class C2G_LoginRequestHandler : MessageRPC<C2G_LoginRequest, G2C_L
|
||||
// 在缓存中检查该账号是否存在
|
||||
var gateUnitManageComponent = scene.GetComponent<GateUnitManageComponent>();
|
||||
|
||||
if (!gateUnitManageComponent.TryGet(accountId, out var gateUnit))
|
||||
{
|
||||
gateUnit = gateUnitManageComponent.Add(session, accountId);
|
||||
}
|
||||
|
||||
var gateUnit = gateUnitManageComponent.Online(session, accountId);
|
||||
|
||||
if (gateUnit == null)
|
||||
{
|
||||
@@ -40,11 +38,11 @@ public sealed class C2G_LoginRequestHandler : MessageRPC<C2G_LoginRequest, G2C_L
|
||||
session.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
response.ErrorCode = await GateLoginHelper.Online(gateUnit);
|
||||
Log.Debug($"当前的Gate服务器:{session.Scene.SceneConfigId} accountId:{accountId}");
|
||||
|
||||
|
||||
// var gameSceneConfig = GameSceneHelper.GetSceneConfig(session);
|
||||
//
|
||||
// // 通过chatSceneConfig拿到这个Scene的RouteId
|
||||
@@ -71,6 +69,5 @@ public sealed class C2G_LoginRequestHandler : MessageRPC<C2G_LoginRequest, G2C_L
|
||||
// // 给当前Session添加一个组件,当Session销毁的时候会销毁这个组件。
|
||||
// var accountFlagComponent = session.AddComponent<SessionPlayerComponent>();
|
||||
// accountFlagComponent.AccountID = accountId;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -40,6 +40,7 @@ public static class GateLoginHelper
|
||||
}
|
||||
|
||||
gateUnitSessionComponent.AccountID = gateUnit.AccountID;
|
||||
gateUnitSessionComponent.SessionId = session.RuntimeId;
|
||||
|
||||
|
||||
//安排游戏服务器,并通知进入
|
||||
@@ -56,14 +57,15 @@ public static class GateLoginHelper
|
||||
|
||||
|
||||
//安排进入的聊天服
|
||||
var chatRouteId = await ChatSceneHelper.Online(session.Scene, roleSimpleInfo, session.RuntimeId);
|
||||
var (chatRouteId, sceneRouteId) =
|
||||
await ChatSceneHelper.Online(session.Scene, roleSimpleInfo, session.RuntimeId);
|
||||
if (chatRouteId <= 0)
|
||||
{
|
||||
return ErrorCode.OnlineSceneFailed;
|
||||
}
|
||||
|
||||
routeComponent.AddAddress(RouteType.ChatRoute, chatRouteId);
|
||||
gateUnit.ChatSceneRouteId = chatRouteId;
|
||||
gateUnit.ChatSceneRouteId = sceneRouteId;
|
||||
Log.Info($"连接聊天服成功,gameRouteId:{gameRouteId}");
|
||||
return ErrorCode.Successful;
|
||||
}
|
||||
@@ -75,12 +77,15 @@ public static class GateLoginHelper
|
||||
/// <summary>
|
||||
/// 网关通知其他服务器下线
|
||||
/// </summary>
|
||||
/// <param name="self"></param>
|
||||
/// <param name="gateUnit"></param>
|
||||
public static async FTask<uint> Offline(GateUnit gateUnit)
|
||||
/// <param name="sessionId"></param>
|
||||
public static async FTask<uint> Offline(GateUnit gateUnit, long sessionId)
|
||||
{
|
||||
await FTask.CompletedTask;
|
||||
//通知服务器下线
|
||||
Log.Info($"断线的session id={sessionId} ChatSceneRouteId={gateUnit.ChatSceneRouteId}");
|
||||
await GameSceneHelper.Offline(gateUnit.Scene, gateUnit.AccountID, sessionId);
|
||||
await ChatSceneHelper.Offline(gateUnit.Scene, gateUnit.AccountID, sessionId,
|
||||
gateUnit.ChatSceneRouteId);
|
||||
return ErrorCode.Successful;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ namespace NB.Gate;
|
||||
|
||||
public static class GateUnitManageComponentSystem
|
||||
{
|
||||
public static GateUnit Add(this GateUnitManageComponent self, Session session, long accountId)
|
||||
public static GateUnit Online(this GateUnitManageComponent self, Session session, long accountId)
|
||||
{
|
||||
if (self.Units.TryGetValue(accountId, out var unit))
|
||||
{
|
||||
@@ -34,11 +34,12 @@ public static class GateUnitManageComponentSystem
|
||||
return self.Units.TryGetValue(accountId, out unit);
|
||||
}
|
||||
|
||||
public static async FTask Remove(this GateUnitManageComponent self, long accountId, bool isDispose = true)
|
||||
public static async FTask Offline(this GateUnitManageComponent self, long accountId, long sessionId,
|
||||
bool isDispose = true)
|
||||
{
|
||||
if (!self.Units.TryGetValue(accountId, out var unit)) return;
|
||||
//通知其他服务器下线
|
||||
var result = await GateLoginHelper.Offline(unit);
|
||||
var result = await GateLoginHelper.Offline(unit, sessionId);
|
||||
if (result != 0)
|
||||
{
|
||||
Log.Error($"通知其他服务器下线失败,错误码:{result}");
|
||||
@@ -52,9 +53,10 @@ public static class GateUnitManageComponentSystem
|
||||
unit.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 回话迭代器
|
||||
/// 会话迭代器
|
||||
/// </summary>
|
||||
/// <param name="self"></param>
|
||||
/// <returns></returns>
|
||||
|
||||
@@ -9,7 +9,7 @@ public class GateUnitSessionComponentSystem : DestroySystem<GateUnitSessionCompo
|
||||
var gateUnitManageComponent = self.Scene.GetComponent<GateUnitManageComponent>();
|
||||
if (gateUnitManageComponent != null)
|
||||
{
|
||||
_ = gateUnitManageComponent.Remove(self.AccountID);
|
||||
_ = gateUnitManageComponent.Offline(self.AccountID, self.SessionId);
|
||||
}
|
||||
|
||||
self.AccountID = 0;
|
||||
|
||||
Reference in New Issue
Block a user