完成离线消息发送和上线获取离线消息

This commit is contained in:
2025-08-13 23:44:59 +08:00
parent f8b876ca2f
commit 022cc1ac3e
39 changed files with 499 additions and 85 deletions

View File

@@ -1,8 +1,17 @@
using Fantasy.Entitas;
using Fantasy;
using Fantasy.DataStructure.Collection;
using Fantasy.Entitas;
namespace NB.Chat;
public class ChatUnitManageComponent : Entity
{
public readonly Dictionary<long, ChatUnit> ChatUnits = new();
/// <summary>
/// 不在线消息缓存
/// </summary>
public readonly OneToManyList<long, ChatMessageInfo> NotSendMessage = new();
public readonly OneToManyList<string, ChatMessageInfo> PrivateMessage = new();
}

View File

@@ -5,4 +5,5 @@ namespace NB.Gate;
public sealed class GateUnitSessionComponent : Entity
{
public long AccountID;
public long SessionId;
}

View File

@@ -260,6 +260,52 @@ namespace Fantasy
public uint ErrorCode { get; set; }
}
/// <summary>
/// 获取离线时的未读私聊
/// </summary>
[ProtoContract]
public partial class C2Chat_GetOfflineMessageRequest : AMessage, ICustomRouteRequest, IProto
{
public static C2Chat_GetOfflineMessageRequest Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<C2Chat_GetOfflineMessageRequest>();
}
public override void Dispose()
{
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<C2Chat_GetOfflineMessageRequest>(this);
#endif
}
[ProtoIgnore]
public Caht2C_GetOfflineMessageResponse ResponseType { get; set; }
public uint OpCode() { return OuterOpcode.C2Chat_GetOfflineMessageRequest; }
[ProtoIgnore]
public int RouteType => Fantasy.RouteType.ChatRoute;
}
/// <summary>
/// 发送聊天响应
/// </summary>
[ProtoContract]
public partial class Caht2C_GetOfflineMessageResponse : AMessage, ICustomRouteResponse, IProto
{
public static Caht2C_GetOfflineMessageResponse Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<Caht2C_GetOfflineMessageResponse>();
}
public override void Dispose()
{
ErrorCode = default;
Message.Clear();
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<Caht2C_GetOfflineMessageResponse>(this);
#endif
}
public uint OpCode() { return OuterOpcode.Caht2C_GetOfflineMessageResponse; }
[ProtoMember(1)]
public List<ChatMessageInfo> Message = new List<ChatMessageInfo>();
[ProtoMember(2)]
public uint ErrorCode { get; set; }
}
/// <summary>
/// 推送消息
/// </summary>
[ProtoContract]

View File

@@ -57,7 +57,7 @@ namespace Fantasy
[ProtoMember(1)]
public int Type { get; set; }
[ProtoMember(2)]
public int Source { get; set; }
public long Source { get; set; }
[ProtoMember(3)]
public ChatUserInfo Trigger { get; set; }
[ProtoMember(4)]

View File

@@ -67,6 +67,47 @@ namespace Fantasy
[ProtoMember(3)]
public uint ErrorCode { get; set; }
}
[ProtoContract]
public partial class G2Game_ExitRequest : AMessage, IRouteRequest, IProto
{
public static G2Game_ExitRequest Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<G2Game_ExitRequest>();
}
public override void Dispose()
{
AccountId = default;
GateRouteId = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<G2Game_ExitRequest>(this);
#endif
}
[ProtoIgnore]
public Game2G_ExitResponse ResponseType { get; set; }
public uint OpCode() { return InnerOpcode.G2Game_ExitRequest; }
[ProtoMember(1)]
public long AccountId { get; set; }
[ProtoMember(2)]
public long GateRouteId { get; set; }
}
[ProtoContract]
public partial class Game2G_ExitResponse : AMessage, IRouteResponse, IProto
{
public static Game2G_ExitResponse Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<Game2G_ExitResponse>();
}
public override void Dispose()
{
ErrorCode = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<Game2G_ExitResponse>(this);
#endif
}
public uint OpCode() { return InnerOpcode.Game2G_ExitResponse; }
[ProtoMember(1)]
public uint ErrorCode { get; set; }
}
/// <summary>
/// 通知游戏服角色进入该聊天服
/// </summary>
@@ -86,7 +127,7 @@ namespace Fantasy
#endif
}
[ProtoIgnore]
public Game2G_EnterResponse ResponseType { get; set; }
public Chat2G_EnterResponse ResponseType { get; set; }
public uint OpCode() { return InnerOpcode.G2Chat_EnterRequest; }
[ProtoMember(1)]
public RoleSimpleInfo Role { get; set; }
@@ -115,6 +156,47 @@ namespace Fantasy
public uint ErrorCode { get; set; }
}
[ProtoContract]
public partial class G2Chat_ExitRequest : AMessage, IRouteRequest, IProto
{
public static G2Chat_ExitRequest Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<G2Chat_ExitRequest>();
}
public override void Dispose()
{
AccountId = default;
GateRouteId = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<G2Chat_ExitRequest>(this);
#endif
}
[ProtoIgnore]
public Chat2G_ExitResponse ResponseType { get; set; }
public uint OpCode() { return InnerOpcode.G2Chat_ExitRequest; }
[ProtoMember(1)]
public long AccountId { get; set; }
[ProtoMember(2)]
public long GateRouteId { get; set; }
}
[ProtoContract]
public partial class Chat2G_ExitResponse : AMessage, IRouteResponse, IProto
{
public static Chat2G_ExitResponse Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<Chat2G_ExitResponse>();
}
public override void Dispose()
{
ErrorCode = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<Chat2G_ExitResponse>(this);
#endif
}
public uint OpCode() { return InnerOpcode.Chat2G_ExitResponse; }
[ProtoMember(1)]
public uint ErrorCode { get; set; }
}
[ProtoContract]
public partial class Chat2G_ChatMessage : AMessage, IRouteMessage, IProto
{
public static Chat2G_ChatMessage Create(Scene scene)
@@ -124,6 +206,7 @@ namespace Fantasy
public override void Dispose()
{
Message = default;
IdList.Clear();
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<Chat2G_ChatMessage>(this);
#endif
@@ -131,6 +214,8 @@ namespace Fantasy
public uint OpCode() { return InnerOpcode.Chat2G_ChatMessage; }
[ProtoMember(1)]
public ChatMessageInfo Message { get; set; }
[ProtoMember(2)]
public List<long> IdList = new List<long>();
}
/// <summary>
/// 创建聊天频道

View File

@@ -4,8 +4,12 @@ namespace Fantasy
{
public const uint G2Game_EnterRequest = 1073751825;
public const uint Game2G_EnterResponse = 1207969553;
public const uint G2Chat_EnterRequest = 1073751826;
public const uint Chat2G_EnterResponse = 1207969554;
public const uint G2Game_ExitRequest = 1073751826;
public const uint Game2G_ExitResponse = 1207969554;
public const uint G2Chat_EnterRequest = 1073751827;
public const uint Chat2G_EnterResponse = 1207969555;
public const uint G2Chat_ExitRequest = 1073751828;
public const uint Chat2G_ExitResponse = 1207969556;
public const uint Chat2G_ChatMessage = 939534097;
public const uint Club2Chat_CreateChannel = 939534098;
}

View File

@@ -12,32 +12,34 @@ namespace Fantasy
public const uint Caht2C_JoinChannelResponse = 2415929107;
public const uint C2Chat_SendMessageRequest = 2281711380;
public const uint Caht2C_SendMessageResponse = 2415929108;
public const uint C2Chat_GetOfflineMessageRequest = 2281711381;
public const uint Caht2C_GetOfflineMessageResponse = 2415929109;
public const uint Chat2C_Message = 2147493651;
public const uint C2Chat_GetChatRecordRequest = 2281711381;
public const uint Caht2C_GetChatRecordResponse = 2415929109;
public const uint C2Chat_GetChatRecordRequest = 2281711382;
public const uint Caht2C_GetChatRecordResponse = 2415929110;
public const uint C2A_LoginRequest = 268445457;
public const uint A2C_LoginResponse = 402663185;
public const uint C2G_LoginRequest = 268445458;
public const uint G2C_LoginResponse = 402663186;
public const uint G2C_RepeatLogin = 134227729;
public const uint C2Game_GetRoleInfoRequest = 2281711382;
public const uint Game2C_GetRoleInfoResponse = 2415929110;
public const uint C2S_CreateRequest = 2281711383;
public const uint S2C_CreateResponse = 2415929111;
public const uint C2S_GetClubInfoRequest = 2281711384;
public const uint S2C_GetClubInfoResponse = 2415929112;
public const uint C2S_GetMemberListRequest = 2281711385;
public const uint S2C_GetMemberListResponse = 2415929113;
public const uint C2S_GetClubListRequest = 2281711386;
public const uint S2C_GetClubListResponse = 2415929114;
public const uint C2S_JoinClubRequest = 2281711387;
public const uint S2C_JoinClubResponse = 2415929115;
public const uint C2S_LeaveClubRequest = 2281711388;
public const uint S2C_LeaveClubResponse = 2415929116;
public const uint C2S_DissolveClubRequest = 2281711389;
public const uint S2C_DissolveClubResponse = 2415929117;
public const uint C2S_DisposeJoinRequest = 2281711390;
public const uint S2C_DisposeJoinResponse = 2415929118;
public const uint C2Game_GetRoleInfoRequest = 2281711383;
public const uint Game2C_GetRoleInfoResponse = 2415929111;
public const uint C2S_CreateClubRequest = 2281711384;
public const uint S2C_CreateClubResponse = 2415929112;
public const uint C2S_GetClubInfoRequest = 2281711385;
public const uint S2C_GetClubInfoResponse = 2415929113;
public const uint C2S_GetMemberListRequest = 2281711386;
public const uint S2C_GetMemberListResponse = 2415929114;
public const uint C2S_GetClubListRequest = 2281711387;
public const uint S2C_GetClubListResponse = 2415929115;
public const uint C2S_JoinClubRequest = 2281711388;
public const uint S2C_JoinClubResponse = 2415929116;
public const uint C2S_LeaveClubRequest = 2281711389;
public const uint S2C_LeaveClubResponse = 2415929117;
public const uint C2S_DissolveClubRequest = 2281711390;
public const uint S2C_DissolveClubResponse = 2415929118;
public const uint C2S_DisposeJoinRequest = 2281711391;
public const uint S2C_DisposeJoinResponse = 2415929119;
public const uint S2C_ClubChange = 2147493652;
}
}

View File

@@ -50,22 +50,22 @@ namespace Fantasy
/// 请求创建工会
/// </summary>
[ProtoContract]
public partial class C2S_CreateRequest : AMessage, ICustomRouteRequest, IProto
public partial class C2S_CreateClubRequest : AMessage, ICustomRouteRequest, IProto
{
public static C2S_CreateRequest Create(Scene scene)
public static C2S_CreateClubRequest Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<C2S_CreateRequest>();
return scene.MessagePoolComponent.Rent<C2S_CreateClubRequest>();
}
public override void Dispose()
{
Name = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<C2S_CreateRequest>(this);
GetScene().MessagePoolComponent.Return<C2S_CreateClubRequest>(this);
#endif
}
[ProtoIgnore]
public Caht2C_GetChatRecordResponse ResponseType { get; set; }
public uint OpCode() { return OuterOpcode.C2S_CreateRequest; }
public S2C_CreateClubResponse ResponseType { get; set; }
public uint OpCode() { return OuterOpcode.C2S_CreateClubRequest; }
[ProtoIgnore]
public int RouteType => Fantasy.RouteType.SocialRoute;
[ProtoMember(1)]
@@ -75,21 +75,21 @@ namespace Fantasy
/// 创建工会响应
/// </summary>
[ProtoContract]
public partial class S2C_CreateResponse : AMessage, ICustomRouteResponse, IProto
public partial class S2C_CreateClubResponse : AMessage, ICustomRouteResponse, IProto
{
public static S2C_CreateResponse Create(Scene scene)
public static S2C_CreateClubResponse Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<S2C_CreateResponse>();
return scene.MessagePoolComponent.Rent<S2C_CreateClubResponse>();
}
public override void Dispose()
{
ErrorCode = default;
Club = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<S2C_CreateResponse>(this);
GetScene().MessagePoolComponent.Return<S2C_CreateClubResponse>(this);
#endif
}
public uint OpCode() { return OuterOpcode.S2C_CreateResponse; }
public uint OpCode() { return OuterOpcode.S2C_CreateClubResponse; }
[ProtoMember(1)]
public ClubInfo Club { get; set; }
[ProtoMember(2)]