服务合并

This commit is contained in:
Bob.Song
2026-03-11 10:15:34 +08:00
parent 945ffe9861
commit c2ec7226c0
68 changed files with 866 additions and 1032 deletions

View File

@@ -57,14 +57,6 @@
networkProtocol="" networkProtocol=""
outerPort="0" innerPort="11031" /> outerPort="0" innerPort="11031" />
<scene id="1006"
processConfigId="1"
worldConfigId="1"
sceneRuntimeMode="MultiThread"
sceneTypeString="Social"
networkProtocol=""
outerPort="0" innerPort="11051" />
<!-- <scene id="1007" --> <!-- <scene id="1007" -->
<!-- processConfigId="1" --> <!-- processConfigId="1" -->
<!-- worldConfigId="1" --> <!-- worldConfigId="1" -->

View File

@@ -2,6 +2,7 @@ using Fantasy.Entitas;
using Fantasy.Helper; using Fantasy.Helper;
using MongoDB.Bson.Serialization.Attributes; using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Bson.Serialization.Options; using MongoDB.Bson.Serialization.Options;
using NB.Chat;
namespace NB.Game; namespace NB.Game;
@@ -64,4 +65,7 @@ public sealed class Player : Entity
[BsonIgnore] public long SessionRunTimeId; [BsonIgnore] public long SessionRunTimeId;
[BsonIgnore] public readonly Dictionary<long, ChatChannelComponent> Channels = new();
[BsonIgnore] public readonly Dictionary<int, long> SendTime = new Dictionary<int, long>();
} }

View File

@@ -0,0 +1,33 @@
// using Fantasy;
// using Fantasy.Entitas;
//
// namespace NB.Chat;
//
// public sealed class SocialUnit : Entity
// {
// public long GateRouteId;
//
// public RoleSimpleInfo Role;
//
// /// <summary>
// /// 当前所在地图
// /// </summary>
// public long MapId;
//
//
// public readonly Dictionary<long, ChatChannelComponent> Channels = new();
// public readonly Dictionary<int, long> SendTime = new Dictionary<int, long>();
//
//
// public override void Dispose()
// {
// if (IsDisposed)
// {
// return;
// }
//
// GateRouteId = 0;
// Role = null;
// base.Dispose();
// }
// }

View File

@@ -0,0 +1,17 @@
// using System.Collections.Generic;
// using Fantasy;
// using Fantasy.DataStructure.Collection;
// using Fantasy.Entitas;
//
// namespace NB.Chat;
//
// public class SocialUnitManageComponent : Entity
// {
// public readonly Dictionary<long, SocialUnit> Units = new();
//
// // public List<MailBox>
// // /// <summary>
// // /// 不在线消息缓存
// // /// </summary>
// // public readonly OneToManyList<long, ChatMessageInfo> NotSendMessage = new();
// }

File diff suppressed because it is too large Load Diff

View File

@@ -27,13 +27,13 @@ namespace Fantasy
public const uint Game2C_RewardNotify = 2147493651; public const uint Game2C_RewardNotify = 2147493651;
public const uint C2Game_GMRequest = 2281711385; public const uint C2Game_GMRequest = 2281711385;
public const uint Game2C_GMResponse = 2415929113; public const uint Game2C_GMResponse = 2415929113;
public const uint C2Map_CreateRoomRequest = 2281711386; public const uint C2Game_CreateRoomRequest = 2281711386;
public const uint Map2C_CreateRoomResponse = 2415929114; public const uint Game2C_CreateRoomResponse = 2415929114;
public const uint C2G_ExitRoomRequest = 268445457; public const uint C2G_ExitRoomRequest = 268445457;
public const uint G2C_ExitRoomResponse = 402663185; public const uint G2C_ExitRoomResponse = 402663185;
public const uint C2G_EnterMapRequest = 268445458; public const uint C2G_EnterMapRequest = 268445458;
public const uint G2C_EnterMapResponse = 402663186; public const uint G2C_EnterMapResponse = 402663186;
public const uint Map2C_ChangeMap = 2147493652; public const uint Game2C_ChangeMap = 2147493652;
public const uint C2A_LoginRequest = 268445459; public const uint C2A_LoginRequest = 268445459;
public const uint A2C_LoginResponse = 402663187; public const uint A2C_LoginResponse = 402663187;
public const uint C2G_LoginRequest = 268445460; public const uint C2G_LoginRequest = 268445460;
@@ -41,52 +41,49 @@ namespace Fantasy
public const uint G2C_RepeatLogin = 134227729; public const uint G2C_RepeatLogin = 134227729;
public const uint C2Game_GetRoleInfoRequest = 2281711387; public const uint C2Game_GetRoleInfoRequest = 2281711387;
public const uint Game2C_GetRoleInfoResponse = 2415929115; public const uint Game2C_GetRoleInfoResponse = 2415929115;
public const uint Map2C_RoleEnterRoomNotify = 2147493653; public const uint Game2C_RoleEnterRoomNotify = 2147493653;
public const uint Map2C_RoleExitRoomNotify = 2147493654; public const uint Game2C_RoleExitRoomNotify = 2147493654;
public const uint C2Map_TakeItemRequest = 2281711388; public const uint C2Game_TakeItemRequest = 2281711388;
public const uint Map2C_TakeItemResponse = 2415929116; public const uint Game2C_TakeItemResponse = 2415929116;
public const uint C2Map_RolePropertyChange = 2147493655; public const uint C2Game_RolePropertyChange = 2147493655;
public const uint Map2C_RoleStateNotify = 2147493656; public const uint Game2C_RoleStateNotify = 2147493656;
public const uint Map2C_RoleGearChangeNotify = 2147493657; public const uint Game2C_RoleGearChangeNotify = 2147493657;
public const uint Map2C_RolePropertyChangeNotify = 2147493658; public const uint Game2C_RolePropertyChangeNotify = 2147493658;
public const uint C2Map_Move = 2147493659; public const uint C2Game_Move = 2147493659;
public const uint C2Map_Look = 2147493660; public const uint C2Game_Look = 2147493660;
public const uint Map2C_MoveNotify = 2147493661; public const uint Game2C_MoveNotify = 2147493661;
public const uint Map2C_LookeNotify = 2147493662; public const uint Game2C_LookeNotify = 2147493662;
public const uint C2S_GetConversationsRequest = 2281711389; public const uint C2Game_GetConversationsRequest = 2281711389;
public const uint S2C_GetConversationsResponse = 2415929117; public const uint Game2C_GetConversationsResponse = 2415929117;
public const uint C2S_SendMailRequest = 2281711390; public const uint C2Game_SendMailRequest = 2281711390;
public const uint S2C_SendMailResponse = 2415929118; public const uint Game2C_SendMailResponse = 2415929118;
public const uint C2S_DeleteMailRequest = 2281711391; public const uint C2Game_DeleteMailRequest = 2281711391;
public const uint S2C_DeleteMailResponse = 2415929119; public const uint Game2C_DeleteMailResponse = 2415929119;
public const uint S2C_HaveMail = 2147493663; public const uint Game2C_HaveMail = 2147493663;
public const uint S2C_MailState = 2147493664; public const uint Game2C_MailState = 2147493664;
public const uint C2Chat_SendMessageRequest = 2281711392; public const uint C2Game_SendMessageRequest = 2281711392;
public const uint Chat2C_SendMessageResponse = 2415929120; public const uint Game2C_SendMessageResponse = 2415929120;
public const uint Chat2C_Message = 2147493665; public const uint Game2C_Message = 2147493665;
public const uint C2S_CreateChannelRequest = 2281711393; public const uint C2Game_CreateChannelRequest = 2281711393;
public const uint S2C_CreateChannelResponse = 2415929121; public const uint Game2C_CreateChannelResponse = 2415929121;
public const uint C2S_JoinChannelRequest = 2281711394; public const uint C2Game_JoinChannelRequest = 2281711394;
public const uint S2C_JoinChannelResponse = 2415929122; public const uint Game2C_JoinChannelResponse = 2415929122;
public const uint C2S_SendMessageRequest = 2281711395; public const uint C2Game_CreateClubRequest = 2281711395;
public const uint S2C_SendMessageResponse = 2415929123; public const uint Game2C_CreateClubResponse = 2415929123;
public const uint S2C_Message = 2147493666; public const uint C2Game_GetClubInfoRequest = 2281711396;
public const uint C2S_CreateClubRequest = 2281711396; public const uint Game2C_GetClubInfoResponse = 2415929124;
public const uint S2C_CreateClubResponse = 2415929124; public const uint C2Game_GetMemberListRequest = 2281711397;
public const uint C2S_GetClubInfoRequest = 2281711397; public const uint Game2C_GetMemberListResponse = 2415929125;
public const uint S2C_GetClubInfoResponse = 2415929125; public const uint C2Game_GetClubListRequest = 2281711398;
public const uint C2S_GetMemberListRequest = 2281711398; public const uint Game2C_GetClubListResponse = 2415929126;
public const uint S2C_GetMemberListResponse = 2415929126; public const uint C2Game_JoinClubRequest = 2281711399;
public const uint C2S_GetClubListRequest = 2281711399; public const uint Game2C_JoinClubResponse = 2415929127;
public const uint S2C_GetClubListResponse = 2415929127; public const uint C2Game_LeaveClubRequest = 2281711400;
public const uint C2S_JoinClubRequest = 2281711400; public const uint Game2C_LeaveClubResponse = 2415929128;
public const uint S2C_JoinClubResponse = 2415929128; public const uint C2Game_DissolveClubRequest = 2281711401;
public const uint C2S_LeaveClubRequest = 2281711401; public const uint Game2C_DissolveClubResponse = 2415929129;
public const uint S2C_LeaveClubResponse = 2415929129; public const uint C2Game_DisposeJoinRequest = 2281711402;
public const uint C2S_DissolveClubRequest = 2281711402; public const uint Game2C_DisposeJoinResponse = 2415929130;
public const uint S2C_DissolveClubResponse = 2415929130; public const uint Game2C_ClubChange = 2147493666;
public const uint C2S_DisposeJoinRequest = 2281711403;
public const uint S2C_DisposeJoinResponse = 2415929131;
public const uint S2C_ClubChange = 2147493667;
} }
} }

View File

@@ -8,15 +8,13 @@ namespace Fantasy
public static partial class RouteType public static partial class RouteType
{ {
public const int GateRoute = 1001; // Gate public const int GateRoute = 1001; // Gate
public const int SocialRoute = 1002; // Social public const int GameRoute = 1002; // Game
public const int GameRoute = 1003; // Game
public static IEnumerable<int> RoamingTypes public static IEnumerable<int> RoamingTypes
{ {
get get
{ {
yield return GateRoute; yield return GateRoute;
yield return SocialRoute;
yield return GameRoute; yield return GameRoute;
} }
} }

View File

@@ -1,33 +0,0 @@
using Fantasy;
using Fantasy.Entitas;
namespace NB.Chat;
public sealed class SocialUnit : Entity
{
public long GateRouteId;
public RoleSimpleInfo Role;
/// <summary>
/// 当前所在地图
/// </summary>
public long MapId;
public readonly Dictionary<long, ChatChannelComponent> Channels = new();
public readonly Dictionary<int, long> SendTime = new Dictionary<int, long>();
public override void Dispose()
{
if (IsDisposed)
{
return;
}
GateRouteId = 0;
Role = null;
base.Dispose();
}
}

View File

@@ -1,17 +0,0 @@
using System.Collections.Generic;
using Fantasy;
using Fantasy.DataStructure.Collection;
using Fantasy.Entitas;
namespace NB.Chat;
public class SocialUnitManageComponent : Entity
{
public readonly Dictionary<long, SocialUnit> Units = new();
// public List<MailBox>
// /// <summary>
// /// 不在线消息缓存
// /// </summary>
// public readonly OneToManyList<long, ChatMessageInfo> NotSendMessage = new();
}

View File

@@ -4,7 +4,6 @@ using Fantasy.Async;
using Fantasy.Network.Interface; using Fantasy.Network.Interface;
using NB.Chat; using NB.Chat;
using NB.Game; using NB.Game;
using NBF.Social;
namespace NB.Common; namespace NB.Common;
@@ -23,14 +22,9 @@ public class G2Common_EnterRequestHandler : AddressRPC<Scene, G2Common_EnterRequ
break; break;
} }
case SceneType.Social: // case SceneType.Social:
{
await RunSocial(scene, request, response);
break;
}
// case SceneType.Map:
// { // {
// await RunMap(scene, request, response); // await RunSocial(scene, request, response);
// break; // break;
// } // }
} }
@@ -53,21 +47,21 @@ public class G2Common_EnterRequestHandler : AddressRPC<Scene, G2Common_EnterRequ
Log.Info($"登录到游戏服成功id={response.UnitRouteId}"); Log.Info($"登录到游戏服成功id={response.UnitRouteId}");
} }
private async FTask RunSocial(Scene scene, G2Common_EnterRequest request, G2Common_EnterResponse response) // private async FTask RunSocial(Scene scene, G2Common_EnterRequest request, G2Common_EnterResponse response)
{ // {
// 在缓存中检查该账号是否存在 // // 在缓存中检查该账号是否存在
var chatUnitManageComponent = scene.GetComponent<SocialUnitManageComponent>(); // var chatUnitManageComponent = scene.GetComponent<SocialUnitManageComponent>();
var account = await chatUnitManageComponent.Online(scene, request.AccountId, request.GateRouteId); // var account = await chatUnitManageComponent.Online(scene, request.AccountId, request.GateRouteId);
//
if (account == null) // if (account == null)
{ // {
response.ErrorCode = ErrorCode.ErrServer; // response.ErrorCode = ErrorCode.ErrServer;
return; // return;
} // }
//
response.UnitRouteId = account.RuntimeId; // response.UnitRouteId = account.RuntimeId;
Log.Info($"登录到社交服成功id={response.UnitRouteId}"); // Log.Info($"登录到社交服成功id={response.UnitRouteId}");
} // }
// private async FTask RunMap(Scene scene, G2Common_EnterRequest request, G2Common_EnterResponse response) // private async FTask RunMap(Scene scene, G2Common_EnterRequest request, G2Common_EnterResponse response)
// { // {

View File

@@ -4,7 +4,6 @@ using Fantasy.Async;
using Fantasy.Network.Interface; using Fantasy.Network.Interface;
using NB.Chat; using NB.Chat;
using NB.Game; using NB.Game;
using NBF.Social;
namespace NB.Common; namespace NB.Common;
@@ -21,11 +20,11 @@ public class G2Common_ExitRequestHandler : AddressRPC<Scene, G2Common_ExitReques
break; break;
} }
case SceneType.Social: // case SceneType.Social:
{ // {
await RunSocial(scene, request, response); // await RunSocial(scene, request, response);
break; // break;
} // }
// case SceneType.Map: // case SceneType.Map:
// { // {
// await RunMap(scene, request, response); // await RunMap(scene, request, response);
@@ -44,13 +43,13 @@ public class G2Common_ExitRequestHandler : AddressRPC<Scene, G2Common_ExitReques
Log.Info("退出游戏服成功=="); Log.Info("退出游戏服成功==");
} }
private async FTask RunSocial(Scene scene, G2Common_ExitRequest request, Common2G_ExitResponse response) // private async FTask RunSocial(Scene scene, G2Common_ExitRequest request, Common2G_ExitResponse response)
{ // {
// 在缓存中检查该账号是否存在 // // 在缓存中检查该账号是否存在
var chatUnitManageComponent = scene.GetComponent<SocialUnitManageComponent>(); // var chatUnitManageComponent = scene.GetComponent<SocialUnitManageComponent>();
await chatUnitManageComponent.Offline(scene, request.AccountId, request.GateRouteId); // await chatUnitManageComponent.Offline(scene, request.AccountId, request.GateRouteId);
Log.Info("退出聊天服成功=="); // Log.Info("退出聊天服成功==");
} // }
// private async FTask RunMap(Scene scene, G2Common_ExitRequest request, Common2G_ExitResponse response) // private async FTask RunMap(Scene scene, G2Common_ExitRequest request, Common2G_ExitResponse response)
// { // {

View File

@@ -13,10 +13,6 @@ public static class SceneConfigHelper
{ {
sceneType = SceneType.Game; sceneType = SceneType.Game;
} }
else if (routeType == RouteType.SocialRoute)
{
sceneType = SceneType.Social;
}
else if (routeType == RouteType.GateRoute) else if (routeType == RouteType.GateRoute)
{ {
sceneType = SceneType.Gate; sceneType = SceneType.Gate;

View File

@@ -6,10 +6,10 @@ using Fantasy.Network.Interface;
namespace NB.Game; namespace NB.Game;
public class C2Map_CreateRoomRequestHandler : AddressRPC<Player, C2Map_CreateRoomRequest, Map2C_CreateRoomResponse> public class C2Map_CreateRoomRequestHandler : AddressRPC<Player, C2Game_CreateRoomRequest, Game2C_CreateRoomResponse>
{ {
protected override async FTask Run(Player entity, C2Map_CreateRoomRequest request, protected override async FTask Run(Player entity, C2Game_CreateRoomRequest request,
Map2C_CreateRoomResponse response, Game2C_CreateRoomResponse response,
Action reply) Action reply)
{ {
var mapUnit = entity.GetComponent<MapUnitComponent>(); var mapUnit = entity.GetComponent<MapUnitComponent>();

View File

@@ -4,9 +4,9 @@ using Fantasy.Network.Interface;
namespace NB.Game; namespace NB.Game;
public class C2Map_LookHandler : Address<Player, C2Map_Look> public class C2Map_LookHandler : Address<Player, C2Game_Look>
{ {
protected override async FTask Run(Player entity, C2Map_Look message) protected override async FTask Run(Player entity, C2Game_Look message)
{ {
var mapUnit = entity.GetComponent<MapUnitComponent>(); var mapUnit = entity.GetComponent<MapUnitComponent>();
if (mapUnit == null) if (mapUnit == null)
@@ -23,7 +23,7 @@ public class C2Map_LookHandler : Address<Player, C2Map_Look>
return; return;
} }
var notifyMessage = new Map2C_LookeNotify() var notifyMessage = new Game2C_LookeNotify()
{ {
Id = entity.Id, Id = entity.Id,
Rotation = message.Rotation, Rotation = message.Rotation,

View File

@@ -5,9 +5,9 @@ using Fantasy.Network.Interface;
namespace NB.Game; namespace NB.Game;
public class C2Map_MoveHandler : Address<Player, C2Map_Move> public class C2Map_MoveHandler : Address<Player, C2Game_Move>
{ {
protected override async FTask Run(Player entity, C2Map_Move message) protected override async FTask Run(Player entity, C2Game_Move message)
{ {
var mapUnit = entity.GetComponent<MapUnitComponent>(); var mapUnit = entity.GetComponent<MapUnitComponent>();
if (mapUnit == null) if (mapUnit == null)
@@ -24,7 +24,7 @@ public class C2Map_MoveHandler : Address<Player, C2Map_Move>
return; return;
} }
// var mapUnitManageComponent = entity.Scene.GetComponent<MapUnitManageComponent>(); // var mapUnitManageComponent = entity.Scene.GetComponent<MapUnitManageComponent>();
var notifyMessage = new Map2C_MoveNotify() var notifyMessage = new Game2C_MoveNotify()
{ {
Id = entity.Id, Id = entity.Id,
Position = message.Position, Position = message.Position,

View File

@@ -4,9 +4,9 @@ using Fantasy.Network.Interface;
namespace NB.Game; namespace NB.Game;
public class C2Map_RolePropertyChangeHandler : Address<Player, C2Map_RolePropertyChange> public class C2Map_RolePropertyChangeHandler : Address<Player, C2Game_RolePropertyChange>
{ {
protected override async FTask Run(Player entity, C2Map_RolePropertyChange message) protected override async FTask Run(Player entity, C2Game_RolePropertyChange message)
{ {
var mapUnit = entity.GetComponent<MapUnitComponent>(); var mapUnit = entity.GetComponent<MapUnitComponent>();
if (mapUnit == null) if (mapUnit == null)
@@ -23,7 +23,7 @@ public class C2Map_RolePropertyChangeHandler : Address<Player, C2Map_RolePropert
return; return;
} }
var notifyMessage = new Map2C_RolePropertyChangeNotify() var notifyMessage = new Game2C_RolePropertyChangeNotify()
{ {
Id = entity.Id, Id = entity.Id,
Propertys = message.Propertys, Propertys = message.Propertys,

View File

@@ -5,9 +5,9 @@ using Fantasy.Network.Interface;
namespace NB.Game; namespace NB.Game;
public class C2Map_TakeItemRequestHandler : AddressRPC<Player, C2Map_TakeItemRequest, Map2C_TakeItemResponse> public class C2Map_TakeItemRequestHandler : AddressRPC<Player, C2Game_TakeItemRequest, Game2C_TakeItemResponse>
{ {
protected override async FTask Run(Player entity, C2Map_TakeItemRequest request, Map2C_TakeItemResponse response, protected override async FTask Run(Player entity, C2Game_TakeItemRequest request, Game2C_TakeItemResponse response,
Action reply) Action reply)
{ {
var itemContainer = entity.GetComponent<PlayerItemContainerComponent>(); var itemContainer = entity.GetComponent<PlayerItemContainerComponent>();
@@ -48,7 +48,7 @@ public class C2Map_TakeItemRequestHandler : AddressRPC<Player, C2Map_TakeItemReq
var room = roomManageComponent.Get(roomId); var room = roomManageComponent.Get(roomId);
if (room != null) if (room != null)
{ {
var notifyMessage = new Map2C_RoleGearChangeNotify(); var notifyMessage = new Game2C_RoleGearChangeNotify();
// notifyMessage // notifyMessage
// return; // return;
foreach (var (_, unit) in room.Units) foreach (var (_, unit) in room.Units)

View File

@@ -0,0 +1,20 @@
// using Fantasy;
// using Fantasy.Async;
// using Fantasy.Network.Interface;
//
// namespace NB.Chat;
//
// public sealed class Other2Chat_ChatMessageHandler : Address<SocialUnit, Other2Chat_ChatMessage>
// {
// protected override async FTask Run(SocialUnit chatUnit, Other2Chat_ChatMessage message)
// {
// var result = ChatSceneHelper.Distribution(chatUnit, message.ChatInfoTree, false);
//
// if (result != 0)
// {
// Log.Warning($"Other2Chat_ChatMessageHandler: Distribution failed, result: {result}");
// }
//
// await FTask.CompletedTask;
// }
// }

View File

@@ -1,12 +1,13 @@
using Fantasy; using Fantasy;
using Fantasy.Async; using Fantasy.Async;
using Fantasy.Network.Interface; using Fantasy.Network.Interface;
using NB.Game;
namespace NB.Chat; namespace NB.Chat;
public sealed class C2Chat_SendMessageRequestHandler : AddressRPC<SocialUnit, C2Chat_SendMessageRequest, Chat2C_SendMessageResponse> public sealed class C2Chat_SendMessageRequestHandler : AddressRPC<Player, C2Game_SendMessageRequest, Game2C_SendMessageResponse>
{ {
protected override async FTask Run(SocialUnit chatUnit, C2Chat_SendMessageRequest request, Chat2C_SendMessageResponse response, Action reply) protected override async FTask Run(Player chatUnit, C2Game_SendMessageRequest request, Game2C_SendMessageResponse response, Action reply)
{ {
response.ErrorCode = ChatSceneHelper.Distribution(chatUnit, request.ChatInfoTree); response.ErrorCode = ChatSceneHelper.Distribution(chatUnit, request.ChatInfoTree);
await FTask.CompletedTask; await FTask.CompletedTask;

View File

@@ -13,11 +13,11 @@ public static class ChatHelper
/// <param name="tree"></param> /// <param name="tree"></param>
public static void SendChatMessage(Scene scene, long chatUnitRouteId, ChatInfoTree tree) public static void SendChatMessage(Scene scene, long chatUnitRouteId, ChatInfoTree tree)
{ {
if (scene.SceneType == SceneType.Social) // if (scene.SceneType == SceneType.Social)
{ // {
Log.Warning("ChatHelper.SendChatMessage: scene is not a chat scene."); // Log.Warning("ChatHelper.SendChatMessage: scene is not a chat scene.");
return; // return;
} // }
var other2ChatChatMessage = new Other2Chat_ChatMessage() var other2ChatChatMessage = new Other2Chat_ChatMessage()
{ {

View File

@@ -2,7 +2,7 @@ using System.Threading.Channels;
using Fantasy; using Fantasy;
using Fantasy.Helper; using Fantasy.Helper;
using Fantasy.Platform.Net; using Fantasy.Platform.Net;
using NBF.Social; using NB.Game;
// ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract // ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
@@ -21,7 +21,7 @@ public static class ChatSceneHelper
/// <param name="tree"></param> /// <param name="tree"></param>
/// <param name="isCheckSendTime"></param> /// <param name="isCheckSendTime"></param>
/// <returns></returns> /// <returns></returns>
public static uint Distribution(SocialUnit chatUnit, ChatInfoTree tree, bool isCheckSendTime = true) public static uint Distribution(Player chatUnit, ChatInfoTree tree, bool isCheckSendTime = true)
{ {
var result = Condition(chatUnit, tree, isCheckSendTime); var result = Condition(chatUnit, tree, isCheckSendTime);
@@ -60,7 +60,7 @@ public static class ChatSceneHelper
/// <param name="tree"></param> /// <param name="tree"></param>
/// <param name="isCheckSendTime"></param> /// <param name="isCheckSendTime"></param>
/// <returns></returns> /// <returns></returns>
private static uint Condition(SocialUnit chatUnit, ChatInfoTree tree, bool isCheckSendTime = true) private static uint Condition(Player chatUnit, ChatInfoTree tree, bool isCheckSendTime = true)
{ {
// 每个频道可能聊天的间隔都不一样。 // 每个频道可能聊天的间隔都不一样。
// 这里的条件判断,是根据频道的类型,来判断是否到达了聊天的间隔。 // 这里的条件判断,是根据频道的类型,来判断是否到达了聊天的间隔。
@@ -152,7 +152,7 @@ public static class ChatSceneHelper
if (tree.Target.Count > 0) if (tree.Target.Count > 0)
{ {
var chatUnitManageComponent = scene.GetComponent<SocialUnitManageComponent>(); var chatUnitManageComponent = scene.GetComponent<PlayerManageComponent>();
// 给一部分人广播消息 // 给一部分人广播消息
foreach (var chatUnitId in tree.Target) foreach (var chatUnitId in tree.Target)
{ {
@@ -162,7 +162,7 @@ public static class ChatSceneHelper
} }
// networkMessagingComponent.SendInnerRoute(chatUnit.GateRouteId, chatMessage); // networkMessagingComponent.SendInnerRoute(chatUnit.GateRouteId, chatMessage);
networkMessagingComponent.Send(chatUnit.GateRouteId, chatMessage); networkMessagingComponent.Send(chatUnit.SessionRunTimeId, chatMessage);
} }
return; return;
} }
@@ -182,7 +182,7 @@ public static class ChatSceneHelper
/// </summary> /// </summary>
/// <param name="chatUnit"></param> /// <param name="chatUnit"></param>
/// <param name="tree"></param> /// <param name="tree"></param>
private static uint Channel(SocialUnit chatUnit, ChatInfoTree tree) private static uint Channel(Player chatUnit, ChatInfoTree tree)
{ {
// 那组队,公会、地图、等这个的聊天,如何使用频道呢? // 那组队,公会、地图、等这个的聊天,如何使用频道呢?
// 这里的频道,是指一个频道,比如一个公会的频道,一个队伍的频道,一个地图的频道。 // 这里的频道,是指一个频道,比如一个公会的频道,一个队伍的频道,一个地图的频道。
@@ -213,7 +213,7 @@ public static class ChatSceneHelper
/// <param name="chatUnit"></param> /// <param name="chatUnit"></param>
/// <param name="tree"></param> /// <param name="tree"></param>
/// <returns></returns> /// <returns></returns>
private static uint Private(SocialUnit chatUnit, ChatInfoTree tree) private static uint Private(Player chatUnit, ChatInfoTree tree)
{ {
// 私聊,就是两个玩家之间,直接聊天。 // 私聊,就是两个玩家之间,直接聊天。
// 1、首先客户端需要知道对方的ID这个ID是通过什么方式获取的呢 // 1、首先客户端需要知道对方的ID这个ID是通过什么方式获取的呢
@@ -230,14 +230,14 @@ public static class ChatSceneHelper
var targetChatUnitId = tree.Target[0]; var targetChatUnitId = tree.Target[0];
var scene = chatUnit.Scene; var scene = chatUnit.Scene;
if (!scene.GetComponent<SocialUnitManageComponent>().TryGet(targetChatUnitId, out var targetChatUnit)) if (!scene.GetComponent<PlayerManageComponent>().TryGet(targetChatUnitId, out var targetChatUnit))
{ {
// 这个2代表对方不在线。 // 这个2代表对方不在线。
return 2; return 2;
} }
var networkMessagingComponent = scene.NetworkMessagingComponent; var networkMessagingComponent = scene.NetworkMessagingComponent;
var chatMessage = new Chat2C_Message() var chatMessage = new Game2C_Message()
{ {
ChatInfoTree = tree ChatInfoTree = tree
}; };
@@ -248,9 +248,9 @@ public static class ChatSceneHelper
// networkMessagingComponent.SendInnerRoute(targetChatUnit.GateRouteId, chatMessage); // networkMessagingComponent.SendInnerRoute(targetChatUnit.GateRouteId, chatMessage);
// 先给自己发送一个聊天消息。 // 先给自己发送一个聊天消息。
networkMessagingComponent.Send(chatUnit.GateRouteId, chatMessage); networkMessagingComponent.Send(chatUnit.SessionRunTimeId, chatMessage);
// 然后再给对方发送一个聊天消息。 // 然后再给对方发送一个聊天消息。
networkMessagingComponent.Send(targetChatUnit.GateRouteId, chatMessage); networkMessagingComponent.Send(targetChatUnit.SessionRunTimeId, chatMessage);
return 0; return 0;
} }

View File

@@ -1,41 +1,39 @@
using Fantasy; using Fantasy;
using Fantasy.Entitas; using Fantasy.Entitas;
using NBF.Social; using NB.Game;
namespace NB.Chat; namespace NB.Chat;
public class MemoryEntity : Entity public class MemoryEntity : Entity
{ {
} }
public static class ChatChannelComponentSystem public static class ChatChannelComponentSystem
{ {
public static void Send(this ChatChannelComponent self, ChatInfoTree tree) public static void Send(this ChatChannelComponent self, ChatInfoTree tree)
{ {
var chatUnitManageComponent = self.Scene.GetComponent<SocialUnitManageComponent>(); var chatUnitManageComponent = self.Scene.GetComponent<PlayerManageComponent>();
var networkMessagingComponent = self.Scene.NetworkMessagingComponent; var networkMessagingComponent = self.Scene.NetworkMessagingComponent;
var chatMessage = new Chat2C_Message() var chatMessage = new Game2C_Message()
{ {
ChatInfoTree = tree ChatInfoTree = tree
}; };
foreach (var unitId in self.Units) foreach (var unitId in self.Units)
{ {
if (!chatUnitManageComponent.Units.TryGetValue(unitId, out var chatUnit)) if (!chatUnitManageComponent.TryGet(unitId, out var chatUnit))
{ {
continue; continue;
} }
// networkMessagingComponent.SendInnerRoute(chatUnit.GateRouteId, chatMessage); // networkMessagingComponent.SendInnerRoute(chatUnit.GateRouteId, chatMessage);
networkMessagingComponent.Send(chatUnit.GateRouteId, chatMessage); networkMessagingComponent.Send(chatUnit.SessionRunTimeId, chatMessage);
} }
} }
public static bool JoinChannel(this ChatChannelComponent self, long chatUnitId) public static bool JoinChannel(this ChatChannelComponent self, long chatUnitId)
{ {
var chatUnitManageComponent = self.Scene.GetComponent<SocialUnitManageComponent>(); var chatUnitManageComponent = self.Scene.GetComponent<PlayerManageComponent>();
if (!chatUnitManageComponent.TryGet(chatUnitId, out var chatUnit)) if (!chatUnitManageComponent.TryGet(chatUnitId, out var chatUnit))
{ {
@@ -49,6 +47,7 @@ public static class ChatChannelComponentSystem
{ {
chatUnit.Channels.Add(self.Id, self); chatUnit.Channels.Add(self.Id, self);
} }
// 可以在这里给客户端发送一个加入频道成功的消息。 // 可以在这里给客户端发送一个加入频道成功的消息。
return true; return true;
} }
@@ -65,7 +64,7 @@ public static class ChatChannelComponentSystem
return; return;
} }
var chatUnitManageComponent = self.Scene.GetComponent<SocialUnitManageComponent>(); var chatUnitManageComponent = self.Scene.GetComponent<PlayerManageComponent>();
if (!chatUnitManageComponent.TryGet(chatUnitId, out var chatUnit)) if (!chatUnitManageComponent.TryGet(chatUnitId, out var chatUnit))
{ {

View File

@@ -2,13 +2,14 @@
using Fantasy; using Fantasy;
using Fantasy.Async; using Fantasy.Async;
using Fantasy.Network.Interface; using Fantasy.Network.Interface;
using NB.Game;
namespace NB.Chat; namespace NB.Chat;
public class C2S_DeleteMailRequestHandler : AddressRPC<SocialUnit, C2S_DeleteMailRequest, S2C_DeleteMailResponse> public class C2Game_DeleteMailRequestHandler : AddressRPC<Player, C2Game_DeleteMailRequest, Game2C_DeleteMailResponse>
{ {
protected override async FTask Run(SocialUnit entity, C2S_DeleteMailRequest request, protected override async FTask Run(Player entity, C2Game_DeleteMailRequest request,
S2C_DeleteMailResponse response, Action reply) Game2C_DeleteMailResponse response, Action reply)
{ {
if (request.Id < 1) if (request.Id < 1)
{ {

View File

@@ -3,14 +3,15 @@ using System.Diagnostics;
using Fantasy; using Fantasy;
using Fantasy.Async; using Fantasy.Async;
using Fantasy.Network.Interface; using Fantasy.Network.Interface;
using NB.Game;
namespace NB.Chat; namespace NB.Chat;
public class public class
C2S_GetConversationsRequestHandler : AddressRPC<SocialUnit, C2S_GetConversationsRequest, S2C_GetConversationsResponse> C2Game_GetConversationsRequestHandler : AddressRPC<Player, C2Game_GetConversationsRequest, Game2C_GetConversationsResponse>
{ {
protected override async FTask Run(SocialUnit entity, C2S_GetConversationsRequest request, protected override async FTask Run(Player entity, C2Game_GetConversationsRequest request,
S2C_GetConversationsResponse response, Action reply) Game2C_GetConversationsResponse response, Action reply)
{ {
Stopwatch stopwatch = new Stopwatch(); Stopwatch stopwatch = new Stopwatch();
stopwatch.Start(); stopwatch.Start();

View File

@@ -2,12 +2,13 @@
using Fantasy; using Fantasy;
using Fantasy.Async; using Fantasy.Async;
using Fantasy.Network.Interface; using Fantasy.Network.Interface;
using NB.Game;
namespace NB.Chat; namespace NB.Chat;
public class C2S_SendMailRequestHandler : AddressRPC<SocialUnit, C2S_SendMailRequest, S2C_SendMailResponse> public class C2Game_SendMailRequestHandler : AddressRPC<Player, C2Game_SendMailRequest, Game2C_SendMailResponse>
{ {
protected override async FTask Run(SocialUnit entity, C2S_SendMailRequest request, S2C_SendMailResponse response, protected override async FTask Run(Player entity, C2Game_SendMailRequest request, Game2C_SendMailResponse response,
Action reply) Action reply)
{ {
if (request.Target < 1) if (request.Target < 1)
@@ -24,7 +25,7 @@ public class C2S_SendMailRequestHandler : AddressRPC<SocialUnit, C2S_SendMailReq
return; return;
} }
var chatUnitManage = entity.Scene.GetComponent<SocialUnitManageComponent>(); var chatUnitManage = entity.Scene.GetComponent<PlayerManageComponent>();
if (chatUnitManage == null) if (chatUnitManage == null)
{ {
Log.Error("组件不存在 SocialUnitManageComponent"); Log.Error("组件不存在 SocialUnitManageComponent");
@@ -50,13 +51,13 @@ public class C2S_SendMailRequestHandler : AddressRPC<SocialUnit, C2S_SendMailReq
mail.OwnerId = request.Target; mail.OwnerId = request.Target;
await conversation.Add(mail); await conversation.Add(mail);
var res = new S2C_HaveMail() var res = new Game2C_HaveMail()
{ {
Mail = mail.ToMailInfo(), Mail = mail.ToMailInfo(),
Key = conversation.Key Key = conversation.Key
}; };
//同步客户端 //同步客户端
entity.Scene.NetworkMessagingComponent.Send(entity.GateRouteId, res); entity.Scene.NetworkMessagingComponent.Send(entity.SessionRunTimeId, res);
// var chatUnit = chatUnitManage.Get(request.Target); // var chatUnit = chatUnitManage.Get(request.Target);
// //

View File

@@ -43,7 +43,7 @@ public static class MailComponentSystem
if (sync) if (sync)
{ {
//同步客户端 //同步客户端
self.Scene.NetworkMessagingComponent.Send(0,new S2C_HaveMail() self.Scene.NetworkMessagingComponent.Send(0,new Game2C_HaveMail()
{ {
Mail = mail.ToMailInfo(), Mail = mail.ToMailInfo(),
}); });
@@ -66,7 +66,7 @@ public static class MailComponentSystem
if (sync) if (sync)
{ {
//同步客户端 //同步客户端
self.Scene.NetworkMessagingComponent.Send(0,new S2C_MailState() self.Scene.NetworkMessagingComponent.Send(0,new Game2C_MailState()
{ {
MailState = (int)MailState.Deleted, MailState = (int)MailState.Deleted,
MailId = mailId, MailId = mailId,

View File

@@ -0,0 +1,146 @@
// using Fantasy;
// using Fantasy.Async;
// using Fantasy.Entitas;
// using Fantasy.Entitas.Interface;
// using NB.Chat;
//
// namespace NBF.Social;
//
// public sealed class ChatUnitManageComponentDestroySystem : DestroySystem<SocialUnitManageComponent>
// {
// protected override void Destroy(SocialUnitManageComponent self)
// {
// foreach (var chatUnit in self.Units.Values.ToArray())
// {
// chatUnit.Dispose();
// }
//
// self.Units.Clear();
// }
// }
//
// public static class SocialUnitManageComponentSystem
// {
// #region 消息缓存
//
// /// <summary>
// /// 离线消息,进入待领取队列
// /// </summary>
// /// <param name="self"></param>
// /// <param name="targetId"></param>
// /// <param name="message"></param>
// public static void SaveOfflineMessage(this SocialUnitManageComponent self, long targetId, ChatMessageInfo message)
// {
// // self.NotSendMessage.Add(targetId, message);
// }
//
// #endregion
//
// #region 上线下线
//
// /// <summary>
// /// 玩家上线
// /// </summary>
// /// <param name="self"></param>
// /// <param name="scene"></param>
// /// <param name="accountId"></param>
// /// <param name="gateRouteId"></param>
// public static async FTask<SocialUnit?> Online(this SocialUnitManageComponent self, Scene scene,
// long accountId,
// long gateRouteId)
// {
// // var accountId = roleSimpleInfo.RoleId;
// if (!self.TryGet(accountId, out var account))
// {
// account = Entity.Create<SocialUnit>(scene, accountId, true, true);
// self.Add(account);
// }
//
// if (account != null)
// {
// await account.TryComponent<MailComponent>();
// account.GateRouteId = gateRouteId;
// // account.Role = roleSimpleInfo;
// }
//
// await FTask.CompletedTask;
// return account;
// }
//
// public static async FTask Offline(this SocialUnitManageComponent self, Scene scene, long accountId,
// long gateRouteId)
// {
// if (self.TryGet(accountId, out var unit) && unit != null)
// {
// if (unit.GateRouteId == gateRouteId)
// {
// Log.Info("退出当前聊天服==");
// self.Remove(accountId); //如果当前网关和下线的网关一致
// }
// }
//
// await FTask.CompletedTask;
// }
//
// #endregion
//
// #region 获取&移除
//
// public static void Add(this SocialUnitManageComponent self, SocialUnit account)
// {
// self.Units.Add(account.Id, account);
// }
//
// public static SocialUnit? Get(this SocialUnitManageComponent self, long accountId)
// {
// return self.Units.GetValueOrDefault(accountId);
// }
//
// public static bool TryGet(this SocialUnitManageComponent self, long accountId, out SocialUnit? account)
// {
// return self.Units.TryGetValue(accountId, out account);
// }
//
// public static void Remove(this SocialUnitManageComponent self, long accountId, bool isDispose = true)
// {
// if (!self.Units.Remove(accountId, out var account))
// {
// return;
// }
//
// if (!isDispose)
// {
// return;
// }
//
// account.Dispose();
// }
//
// #endregion
//
// #region 组件
//
// /// <summary>
// /// 尝试给增加相关组件
// /// </summary>
// /// <param name="socialUnit"></param>
// /// <typeparam name="T"></typeparam>
// public static async FTask TryComponent<T>(this SocialUnit socialUnit) where T : Entity, new()
// {
// if (socialUnit.GetComponent<T>() == null)
// {
// var mailComponent = await socialUnit.Scene.World.Database.Query<T>(socialUnit.Id, true);
// if (mailComponent == null)
// {
// //如果没有邮件组件
// socialUnit.AddComponent<T>();
// }
// else
// {
// socialUnit.AddComponent(mailComponent);
// }
// }
// }
//
// #endregion
// }

View File

@@ -0,0 +1,22 @@
// using Fantasy.Entitas.Interface;
// #pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
//
// namespace NB.Chat;
//
// public sealed class SocialUnitDestroySystem : DestroySystem<SocialUnit>
// {
// protected override void Destroy(SocialUnit self)
// {
// self.Role?.Return();
// self.Role = null;
// self.GateRouteId = 0;
// // 退出当前ChatUnit拥有的所有频道
// foreach (var (_,chatChannelComponent) in self.Channels)
// {
// chatChannelComponent.ExitChannel(self.Id, false);
// }
// // 理论情况下这个self.Channels不会存在因为数据的因为上面已经给清空掉了。
// // 但是self.Channels.Clear();还是加上吧,防止以后忘记了。
// self.Channels.Clear();
// }
// }

View File

@@ -11,7 +11,7 @@ public class S2G_ChatMessageHandler : Address<Scene, Chat2G_ChatMessage>
{ {
protected override async FTask Run(Scene scene, Chat2G_ChatMessage message) protected override async FTask Run(Scene scene, Chat2G_ChatMessage message)
{ {
// var chatMessage = new S2C_Message() // var chatMessage = new Game2C_Message()
// { // {
// Msg = message.Message, // Msg = message.Message,
// }; // };
@@ -42,7 +42,7 @@ public class S2G_ChatMessageHandler : Address<Scene, Chat2G_ChatMessage>
// } // }
// } // }
// } // }
var chatMessage = new Chat2C_Message() var chatMessage = new Game2C_Message()
{ {
ChatInfoTree = message.ChatInfoTree ChatInfoTree = message.ChatInfoTree
}; };

View File

@@ -45,7 +45,7 @@ public static class GateLoginHelper
gateUnitSessionComponent.AccountID = gateUnit.AccountID; gateUnitSessionComponent.AccountID = gateUnit.AccountID;
gateUnitSessionComponent.SessionId = session.RuntimeId; gateUnitSessionComponent.SessionId = session.RuntimeId;
return await gateUnit.Online(RouteType.GameRoute, RouteType.SocialRoute); return await gateUnit.Online(RouteType.GameRoute);
} }
#endregion #endregion
@@ -61,7 +61,7 @@ public static class GateLoginHelper
{ {
//通知服务器下线 //通知服务器下线
Log.Info($"断线的session id={sessionId}"); Log.Info($"断线的session id={sessionId}");
var ret = await gateUnit.Offline(sessionId, RouteType.GameRoute, RouteType.SocialRoute); var ret = await gateUnit.Offline(sessionId, RouteType.GameRoute);
return ret; return ret;
} }

View File

@@ -12,8 +12,4 @@
<ProjectReference Include="..\Entity\Entity.csproj" /> <ProjectReference Include="..\Entity\Entity.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Social\Chat\Handler\Inner\" />
</ItemGroup>
</Project> </Project>

View File

@@ -44,15 +44,16 @@ public sealed class OnCreateSceneEvent : AsyncEventSystem<OnCreateScene>
// await InitializeMapScene(scene); // await InitializeMapScene(scene);
// break; // break;
// } // }
case SceneType.Social: // case SceneType.Social:
{ // {
// Gate 场景初始化 // // Gate 场景初始化
await InitializeSocialScene(scene); // await InitializeSocialScene(scene);
break; // break;
} // }
case SceneType.Game: case SceneType.Game:
{ {
await InitializeGameScene(scene); await InitializeGameScene(scene);
await InitializeSocialScene(scene);
break; break;
} }
} }
@@ -139,7 +140,6 @@ public sealed class OnCreateSceneEvent : AsyncEventSystem<OnCreateScene>
{ {
Log.Info($"初始化 Social 场景: {scene.Id}"); Log.Info($"初始化 Social 场景: {scene.Id}");
//用于管理玩家的组件 //用于管理玩家的组件
scene.AddComponent<SocialUnitManageComponent>();
scene.AddComponent<MailManageComponent>(); scene.AddComponent<MailManageComponent>();
//聊天 //聊天
// 聊天频道中控中心组件。 // 聊天频道中控中心组件。

View File

@@ -1,20 +0,0 @@
using Fantasy;
using Fantasy.Async;
using Fantasy.Network.Interface;
namespace NB.Chat;
public sealed class Other2Chat_ChatMessageHandler : Address<SocialUnit, Other2Chat_ChatMessage>
{
protected override async FTask Run(SocialUnit chatUnit, Other2Chat_ChatMessage message)
{
var result = ChatSceneHelper.Distribution(chatUnit, message.ChatInfoTree, false);
if (result != 0)
{
Log.Warning($"Other2Chat_ChatMessageHandler: Distribution failed, result: {result}");
}
await FTask.CompletedTask;
}
}

View File

@@ -1,146 +0,0 @@
using Fantasy;
using Fantasy.Async;
using Fantasy.Entitas;
using Fantasy.Entitas.Interface;
using NB.Chat;
namespace NBF.Social;
public sealed class ChatUnitManageComponentDestroySystem : DestroySystem<SocialUnitManageComponent>
{
protected override void Destroy(SocialUnitManageComponent self)
{
foreach (var chatUnit in self.Units.Values.ToArray())
{
chatUnit.Dispose();
}
self.Units.Clear();
}
}
public static class SocialUnitManageComponentSystem
{
#region
/// <summary>
/// 离线消息,进入待领取队列
/// </summary>
/// <param name="self"></param>
/// <param name="targetId"></param>
/// <param name="message"></param>
public static void SaveOfflineMessage(this SocialUnitManageComponent self, long targetId, ChatMessageInfo message)
{
// self.NotSendMessage.Add(targetId, message);
}
#endregion
#region 线线
/// <summary>
/// 玩家上线
/// </summary>
/// <param name="self"></param>
/// <param name="scene"></param>
/// <param name="accountId"></param>
/// <param name="gateRouteId"></param>
public static async FTask<SocialUnit?> Online(this SocialUnitManageComponent self, Scene scene,
long accountId,
long gateRouteId)
{
// var accountId = roleSimpleInfo.RoleId;
if (!self.TryGet(accountId, out var account))
{
account = Entity.Create<SocialUnit>(scene, accountId, true, true);
self.Add(account);
}
if (account != null)
{
await account.TryComponent<MailComponent>();
account.GateRouteId = gateRouteId;
// account.Role = roleSimpleInfo;
}
await FTask.CompletedTask;
return account;
}
public static async FTask Offline(this SocialUnitManageComponent self, Scene scene, long accountId,
long gateRouteId)
{
if (self.TryGet(accountId, out var unit) && unit != null)
{
if (unit.GateRouteId == gateRouteId)
{
Log.Info("退出当前聊天服==");
self.Remove(accountId); //如果当前网关和下线的网关一致
}
}
await FTask.CompletedTask;
}
#endregion
#region &
public static void Add(this SocialUnitManageComponent self, SocialUnit account)
{
self.Units.Add(account.Id, account);
}
public static SocialUnit? Get(this SocialUnitManageComponent self, long accountId)
{
return self.Units.GetValueOrDefault(accountId);
}
public static bool TryGet(this SocialUnitManageComponent self, long accountId, out SocialUnit? account)
{
return self.Units.TryGetValue(accountId, out account);
}
public static void Remove(this SocialUnitManageComponent self, long accountId, bool isDispose = true)
{
if (!self.Units.Remove(accountId, out var account))
{
return;
}
if (!isDispose)
{
return;
}
account.Dispose();
}
#endregion
#region
/// <summary>
/// 尝试给增加相关组件
/// </summary>
/// <param name="socialUnit"></param>
/// <typeparam name="T"></typeparam>
public static async FTask TryComponent<T>(this SocialUnit socialUnit) where T : Entity, new()
{
if (socialUnit.GetComponent<T>() == null)
{
var mailComponent = await socialUnit.Scene.World.Database.Query<T>(socialUnit.Id, true);
if (mailComponent == null)
{
//如果没有邮件组件
socialUnit.AddComponent<T>();
}
else
{
socialUnit.AddComponent(mailComponent);
}
}
}
#endregion
}

View File

@@ -1,22 +0,0 @@
using Fantasy.Entitas.Interface;
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
namespace NB.Chat;
public sealed class SocialUnitDestroySystem : DestroySystem<SocialUnit>
{
protected override void Destroy(SocialUnit self)
{
self.Role?.Return();
self.Role = null;
self.GateRouteId = 0;
// 退出当前ChatUnit拥有的所有频道
foreach (var (_,chatChannelComponent) in self.Channels)
{
chatChannelComponent.ExitChannel(self.Id, false);
}
// 理论情况下这个self.Channels不会存在因为数据的因为上面已经给清空掉了。
// 但是self.Channels.Clear();还是加上吧,防止以后忘记了。
self.Channels.Clear();
}
}

View File

@@ -10,6 +10,7 @@
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AISerialize_002Ecs_002Fl_003AC_0021_003FUsers_003FFIREBAT_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F199e3c534d1e41cbb9a3a30bbf9ac93bde200_003F7d_003F9fe3ad36_003FISerialize_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AISerialize_002Ecs_002Fl_003AC_0021_003FUsers_003FFIREBAT_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F199e3c534d1e41cbb9a3a30bbf9ac93bde200_003F7d_003F9fe3ad36_003FISerialize_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AList_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FSourcesCache_003F1b81cb3be224213a6a73519b6e340a628d9a1fb8629c351a186a26f6376669_003FList_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AList_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FSourcesCache_003F1b81cb3be224213a6a73519b6e340a628d9a1fb8629c351a186a26f6376669_003FList_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ANetworkMessagingComponent_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F5935efc3ba8745d5800392d88681b8c2ddc00_003Fdd_003Fc26349d0_003FNetworkMessagingComponent_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ANetworkMessagingComponent_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F5935efc3ba8745d5800392d88681b8c2ddc00_003Fdd_003Fc26349d0_003FNetworkMessagingComponent_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ANetworkMessagingComponent_002Ecs_002Fl_003AC_0021_003FUsers_003FFIREBAT_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F199e3c534d1e41cbb9a3a30bbf9ac93bde200_003F6d_003F2f2e114c_003FNetworkMessagingComponent_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AScene_002Ecs_002Fl_003AC_0021_003FUsers_003FFIREBAT_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F3cbbaf32e578423d8d0163d75da8233f87e00_003F6a_003F5adfe93e_003FScene_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AScene_002Ecs_002Fl_003AC_0021_003FUsers_003FFIREBAT_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F3cbbaf32e578423d8d0163d75da8233f87e00_003F6a_003F5adfe93e_003FScene_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASerializerManager_002Ecs_002Fl_003AC_0021_003FUsers_003FFIREBAT_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F199e3c534d1e41cbb9a3a30bbf9ac93bde200_003F9f_003Fa4f53cf4_003FSerializerManager_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASerializerManager_002Ecs_002Fl_003AC_0021_003FUsers_003FFIREBAT_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F199e3c534d1e41cbb9a3a30bbf9ac93bde200_003F9f_003Fa4f53cf4_003FSerializerManager_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASortedOneToManyList_00602_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F3cbbaf32e578423d8d0163d75da8233f87e00_003F12_003Fcfa98068_003FSortedOneToManyList_00602_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASortedOneToManyList_00602_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F3cbbaf32e578423d8d0163d75da8233f87e00_003F12_003Fcfa98068_003FSortedOneToManyList_00602_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>

View File

@@ -2,13 +2,13 @@ syntax = "proto3";
package Fantasy.Network.Message; package Fantasy.Network.Message;
/// 请求创建房间 /// 请求创建房间
message C2Map_CreateRoomRequest // ICustomRouteRequest,Map2C_CreateRoomResponse,GameRoute message C2Game_CreateRoomRequest // ICustomRouteRequest,Game2C_CreateRoomResponse,GameRoute
{ {
int32 MapId = 1;//地图id int32 MapId = 1;//地图id
} }
/// 请求创建房间成功 /// 请求创建房间成功
message Map2C_CreateRoomResponse // ICustomRouteResponse message Game2C_CreateRoomResponse // ICustomRouteResponse
{ {
string RoomCode = 1; //房间代码 string RoomCode = 1; //房间代码
repeated MapUnitInfo Units = 2; //房间玩家列表 repeated MapUnitInfo Units = 2; //房间玩家列表
@@ -47,7 +47,7 @@ message G2C_EnterMapResponse // IResponse
/// 通知客户端切换地图 /// 通知客户端切换地图
message Map2C_ChangeMap // ICustomRouteMessage,GameRoute message Game2C_ChangeMap // ICustomRouteMessage,GameRoute
{ {
int32 MapId = 1; //地图id int32 MapId = 1; //地图id
int32 Node = 2; //站位节点 int32 Node = 2; //站位节点

View File

@@ -4,13 +4,13 @@ package Fantasy.Network.Message;
//************** 进入 离开 ********************** //************** 进入 离开 **********************
///用户进入地图 ///用户进入地图
message Map2C_RoleEnterRoomNotify // ICustomRouteMessage,GameRoute message Game2C_RoleEnterRoomNotify // ICustomRouteMessage,GameRoute
{ {
MapUnitInfo Info = 2; MapUnitInfo Info = 2;
} }
///用户离开地图 ///用户离开地图
message Map2C_RoleExitRoomNotify // ICustomRouteMessage,GameRoute message Game2C_RoleExitRoomNotify // ICustomRouteMessage,GameRoute
{ {
int64 Id = 1;//离开人员 int64 Id = 1;//离开人员
} }
@@ -18,14 +18,14 @@ message Map2C_RoleExitRoomNotify // ICustomRouteMessage,GameRoute
//************** 物品变化 ********************** //************** 物品变化 **********************
/// 请求拿起物品 /// 请求拿起物品
message C2Map_TakeItemRequest // ICustomRouteRequest,Map2C_TakeItemResponse,GameRoute message C2Game_TakeItemRequest // ICustomRouteRequest,Game2C_TakeItemResponse,GameRoute
{ {
int32 Id = 1; //物品id int32 Id = 1; //物品id
bool Task = 2; //拿起 bool Task = 2; //拿起
} }
/// 请求拿起物品响应 /// 请求拿起物品响应
message Map2C_TakeItemResponse // ICustomRouteResponse message Game2C_TakeItemResponse // ICustomRouteResponse
{ {
int32 Id = 1; //物品id int32 Id = 1; //物品id
bool Task = 2; //拿起 bool Task = 2; //拿起
@@ -33,27 +33,27 @@ message Map2C_TakeItemResponse // ICustomRouteResponse
//************** 参数变化 ********************** //************** 参数变化 **********************
message C2Map_RolePropertyChange // ICustomRouteMessage,GameRoute message C2Game_RolePropertyChange // ICustomRouteMessage,GameRoute
{ {
repeated KeyValueInt64 Propertys = 1; //变化的属性信息 repeated KeyValueInt64 Propertys = 1; //变化的属性信息
} }
///玩家状态变化同步 ///玩家状态变化同步
message Map2C_RoleStateNotify // ICustomRouteMessage,GameRoute message Game2C_RoleStateNotify // ICustomRouteMessage,GameRoute
{ {
int64 Id = 1; int64 Id = 1;
UnitStateInfo State = 2; UnitStateInfo State = 2;
} }
///玩家钓组变化 ///玩家钓组变化
message Map2C_RoleGearChangeNotify // ICustomRouteMessage,GameRoute message Game2C_RoleGearChangeNotify // ICustomRouteMessage,GameRoute
{ {
int64 Id = 1; int64 Id = 1;
repeated GearInfo Gears = 2; //钓组数据 repeated GearInfo Gears = 2; //钓组数据
} }
//玩家属性值变化 //玩家属性值变化
message Map2C_RolePropertyChangeNotify // ICustomRouteMessage,GameRoute message Game2C_RolePropertyChangeNotify // ICustomRouteMessage,GameRoute
{ {
int64 Id = 1; int64 Id = 1;
repeated KeyValueInt64 Propertys = 2; //变化的属性信息 repeated KeyValueInt64 Propertys = 2; //变化的属性信息
@@ -64,7 +64,7 @@ message Map2C_RolePropertyChangeNotify // ICustomRouteMessage,GameRoute
//************** 移动 旋转 ********************** //************** 移动 旋转 **********************
// 角色移动 // 角色移动
message C2Map_Move // ICustomRouteMessage,GameRoute message C2Game_Move // ICustomRouteMessage,GameRoute
{ {
Vector3Info Position = 1; //当前位置 Vector3Info Position = 1; //当前位置
Vector3Info Rotation = 2; //角色方向 Vector3Info Rotation = 2; //角色方向
@@ -75,14 +75,14 @@ message C2Map_Move // ICustomRouteMessage,GameRoute
} }
// 角色朝向变化 // 角色朝向变化
message C2Map_Look // ICustomRouteMessage,GameRoute message C2Game_Look // ICustomRouteMessage,GameRoute
{ {
Vector3Info Rotation = 1; //角色方向 Vector3Info Rotation = 1; //角色方向
int64 Timestamp = 2; // 时间点 int64 Timestamp = 2; // 时间点
} }
///玩家移动推送 ///玩家移动推送
message Map2C_MoveNotify // ICustomRouteMessage,GameRoute message Game2C_MoveNotify // ICustomRouteMessage,GameRoute
{ {
int64 Id = 1; // id int64 Id = 1; // id
Vector3Info Position = 2; //当前位置 Vector3Info Position = 2; //当前位置
@@ -94,7 +94,7 @@ message Map2C_MoveNotify // ICustomRouteMessage,GameRoute
} }
///玩家旋转推送 ///玩家旋转推送
message Map2C_LookeNotify // ICustomRouteMessage,GameRoute message Game2C_LookeNotify // ICustomRouteMessage,GameRoute
{ {
int64 Id = 1; // id int64 Id = 1; // id
Vector3Info Rotation = 2; //角色方向 Vector3Info Rotation = 2; //角色方向

View File

@@ -23,19 +23,19 @@ message MailInfo
///请求会话列表 ///请求会话列表
message C2S_GetConversationsRequest // ICustomRouteRequest,S2C_GetConversationsResponse,SocialRoute message C2Game_GetConversationsRequest // ICustomRouteRequest,Game2C_GetConversationsResponse,GameRoute
{ {
} }
///请求会话列表响应 ///请求会话列表响应
message S2C_GetConversationsResponse // ICustomRouteResponse message Game2C_GetConversationsResponse // ICustomRouteResponse
{ {
repeated ConversationInfo List = 1; repeated ConversationInfo List = 1;
} }
///发送邮件消息 ///发送邮件消息
message C2S_SendMailRequest // ICustomRouteRequest,S2C_SendMailResponse,SocialRoute message C2Game_SendMailRequest // ICustomRouteRequest,Game2C_SendMailResponse,GameRoute
{ {
int64 Target = 1; //目标id int64 Target = 1; //目标id
string Content = 2; //内容 string Content = 2; //内容
@@ -43,32 +43,32 @@ message C2S_SendMailRequest // ICustomRouteRequest,S2C_SendMailResponse,SocialRo
} }
///发送邮件消息响应 ///发送邮件消息响应
message S2C_SendMailResponse // ICustomRouteResponse message Game2C_SendMailResponse // ICustomRouteResponse
{ {
} }
///发送删除会话消息 ///发送删除会话消息
message C2S_DeleteMailRequest // ICustomRouteRequest,S2C_DeleteMailResponse,SocialRoute message C2Game_DeleteMailRequest // ICustomRouteRequest,Game2C_DeleteMailResponse,GameRoute
{ {
int64 Id = 1; //会话id int64 Id = 1; //会话id
} }
///发送删除会话消息响应 ///发送删除会话消息响应
message S2C_DeleteMailResponse // ICustomRouteResponse message Game2C_DeleteMailResponse // ICustomRouteResponse
{ {
int64 Id = 1; //会话id int64 Id = 1; //会话id
} }
///新邮件推送 ///新邮件推送
message S2C_HaveMail // ICustomRouteMessage,SocialRoute message Game2C_HaveMail // ICustomRouteMessage,GameRoute
{ {
MailInfo Mail = 1; MailInfo Mail = 1;
string Key = 2; string Key = 2;
} }
message S2C_MailState // ICustomRouteMessage,SocialRoute message Game2C_MailState // ICustomRouteMessage,GameRoute
{ {
int32 MailState = 1; int32 MailState = 1;
int64 MailId = 2; int64 MailId = 2;
@@ -77,17 +77,17 @@ message S2C_MailState // ICustomRouteMessage,SocialRoute
////////////// ******** 频道聊天 *******///////////// ////////////// ******** 频道聊天 *******/////////////
/// 发送一个聊天消息给Chat服务器中间是经过Gate中转的 /// 发送一个聊天消息给Chat服务器中间是经过Gate中转的
message C2Chat_SendMessageRequest // ICustomRouteRequest,Chat2C_SendMessageResponse,SocialRoute message C2Game_SendMessageRequest // ICustomRouteRequest,Game2C_SendMessageResponse,GameRoute
{ {
ChatInfoTree ChatInfoTree = 1; ChatInfoTree ChatInfoTree = 1;
} }
message Chat2C_SendMessageResponse // ICustomRouteResponse message Game2C_SendMessageResponse // ICustomRouteResponse
{ {
} }
// 该消息是Chat发送给Gate服务器让Gate服务器自动转发到客户端 // 该消息是Chat发送给Gate服务器让Gate服务器自动转发到客户端
message Chat2C_Message // ICustomRouteMessage,SocialRoute message Game2C_Message // ICustomRouteMessage,GameRoute
{ {
ChatInfoTree ChatInfoTree = 1; ChatInfoTree ChatInfoTree = 1;
} }
@@ -164,47 +164,47 @@ message ChatMessageInfo
} }
///创建频道 ///创建频道
message C2S_CreateChannelRequest // ICustomRouteRequest,S2C_CreateChannelResponse,SocialRoute message C2Game_CreateChannelRequest // ICustomRouteRequest,Game2C_CreateChannelResponse,GameRoute
{ {
string Name = 1; //频道名称 string Name = 1; //频道名称
} }
///创建频道响应 ///创建频道响应
message S2C_CreateChannelResponse // ICustomRouteResponse message Game2C_CreateChannelResponse // ICustomRouteResponse
{ {
int64 ChannelId = 1; //创建的频道id int64 ChannelId = 1; //创建的频道id
} }
///请求进入频道 ///请求进入频道
message C2S_JoinChannelRequest // ICustomRouteRequest,S2C_JoinChannelResponse,SocialRoute message C2Game_JoinChannelRequest // ICustomRouteRequest,Game2C_JoinChannelResponse,GameRoute
{ {
int64 Target = 1; // 频道id int64 Target = 1; // 频道id
} }
///进入频道响应 ///进入频道响应
message S2C_JoinChannelResponse // ICustomRouteResponse message Game2C_JoinChannelResponse // ICustomRouteResponse
{ {
} }
///发送消息 // ///发送消息
message C2S_SendMessageRequest // ICustomRouteRequest,S2C_SendMessageResponse,SocialRoute // message C2Game_SendMessageRequest // ICustomRouteRequest,Game2C_SendMessageResponse,GameRoute
{ // {
string Message = 1; // string Message = 1;
int64 Target = 2; //目标id // int64 Target = 2; //目标id
} // }
///发送消息响应 // ///发送消息响应
message S2C_SendMessageResponse // ICustomRouteResponse // message Game2C_SendMessageResponse // ICustomRouteResponse
{ // {
} // }
///推送消息 // ///推送消息
message S2C_Message // ICustomRouteMessage,SocialRoute // message Game2C_Message // ICustomRouteMessage,GameRoute
{ // {
ChatMessageInfo Msg = 1; // ChatMessageInfo Msg = 1;
} // }
////////////// ******** 工会 *******///////////// ////////////// ******** 工会 *******/////////////
@@ -219,89 +219,89 @@ message ClubInfo
} }
///请求创建工会 ///请求创建工会
message C2S_CreateClubRequest // ICustomRouteRequest,S2C_CreateClubResponse,SocialRoute message C2Game_CreateClubRequest // ICustomRouteRequest,Game2C_CreateClubResponse,GameRoute
{ {
string Name = 1; //工会名称 string Name = 1; //工会名称
} }
///创建工会响应 ///创建工会响应
message S2C_CreateClubResponse // ICustomRouteResponse message Game2C_CreateClubResponse // ICustomRouteResponse
{ {
ClubInfo Club = 1; //创建的工会信息 ClubInfo Club = 1; //创建的工会信息
} }
///请求工会信息 ///请求工会信息
message C2S_GetClubInfoRequest // ICustomRouteRequest,S2C_GetClubInfoResponse,SocialRoute message C2Game_GetClubInfoRequest // ICustomRouteRequest,Game2C_GetClubInfoResponse,GameRoute
{ {
int64 ClubId = 1; //工会ID int64 ClubId = 1; //工会ID
} }
///响应工会信息 ///响应工会信息
message S2C_GetClubInfoResponse // ICustomRouteResponse message Game2C_GetClubInfoResponse // ICustomRouteResponse
{ {
string Name = 1; //工会名称 string Name = 1; //工会名称
} }
/// 请求工会成员列表 /// 请求工会成员列表
message C2S_GetMemberListRequest // ICustomRouteRequest,S2C_GetMemberListResponse,SocialRoute message C2Game_GetMemberListRequest // ICustomRouteRequest,Game2C_GetMemberListResponse,GameRoute
{ {
int64 ClubId = 1; //工会ID int64 ClubId = 1; //工会ID
} }
/// 响应工会成员列表 /// 响应工会成员列表
message S2C_GetMemberListResponse // ICustomRouteResponse message Game2C_GetMemberListResponse // ICustomRouteResponse
{ {
repeated RoleSimpleInfo Members = 1; //工会成员列表 repeated RoleSimpleInfo Members = 1; //工会成员列表
} }
///获取工会列表请求 ///获取工会列表请求
message C2S_GetClubListRequest // ICustomRouteRequest,S2C_GetClubListResponse,SocialRoute message C2Game_GetClubListRequest // ICustomRouteRequest,Game2C_GetClubListResponse,GameRoute
{ {
} }
///获取工会列表响应 ///获取工会列表响应
message S2C_GetClubListResponse // ICustomRouteResponse message Game2C_GetClubListResponse // ICustomRouteResponse
{ {
repeated ClubInfo Clubs = 1; //工会列表 repeated ClubInfo Clubs = 1; //工会列表
} }
/// 请求加入工会 /// 请求加入工会
message C2S_JoinClubRequest // ICustomRouteRequest,S2C_JoinClubResponse,SocialRoute message C2Game_JoinClubRequest // ICustomRouteRequest,Game2C_JoinClubResponse,GameRoute
{ {
int64 ClubId = 1; //工会ID int64 ClubId = 1; //工会ID
} }
/// 响应加入工会 /// 响应加入工会
message S2C_JoinClubResponse // ICustomRouteResponse message Game2C_JoinClubResponse // ICustomRouteResponse
{ {
ClubInfo Club = 1; //加入的工会信息 ClubInfo Club = 1; //加入的工会信息
} }
/// 请求退出工会 /// 请求退出工会
message C2S_LeaveClubRequest // ICustomRouteRequest,S2C_LeaveClubResponse,SocialRoute message C2Game_LeaveClubRequest // ICustomRouteRequest,Game2C_LeaveClubResponse,GameRoute
{ {
int64 ClubId = 1; //工会ID int64 ClubId = 1; //工会ID
} }
/// 响应退出工会 /// 响应退出工会
message S2C_LeaveClubResponse // ICustomRouteResponse message Game2C_LeaveClubResponse // ICustomRouteResponse
{ {
int64 ClubId = 1; //退出的工会ID int64 ClubId = 1; //退出的工会ID
} }
/// 请求解散工会 /// 请求解散工会
message C2S_DissolveClubRequest // ICustomRouteRequest,S2C_DissolveClubResponse,SocialRoute message C2Game_DissolveClubRequest // ICustomRouteRequest,Game2C_DissolveClubResponse,GameRoute
{ {
int64 ClubId = 1; //工会ID int64 ClubId = 1; //工会ID
} }
/// 响应解散工会 /// 响应解散工会
message S2C_DissolveClubResponse // ICustomRouteResponse message Game2C_DissolveClubResponse // ICustomRouteResponse
{ {
int64 ClubId = 1; //解散的工会ID int64 ClubId = 1; //解散的工会ID
} }
/// 请求操作申请 /// 请求操作申请
message C2S_DisposeJoinRequest // ICustomRouteRequest,S2C_DisposeJoinResponse,SocialRoute message C2Game_DisposeJoinRequest // ICustomRouteRequest,Game2C_DisposeJoinResponse,GameRoute
{ {
int64 ClubId = 1; //工会ID int64 ClubId = 1; //工会ID
int64 ApplicantId = 2; //申请人ID int64 ApplicantId = 2; //申请人ID
@@ -309,7 +309,7 @@ message C2S_DisposeJoinRequest // ICustomRouteRequest,S2C_DisposeJoinResponse,So
} }
/// 响应操作申请 /// 响应操作申请
message S2C_DisposeJoinResponse // ICustomRouteResponse message Game2C_DisposeJoinResponse // ICustomRouteResponse
{ {
int64 ClubId = 1; //工会ID int64 ClubId = 1; //工会ID
int64 ApplicantId = 2; //申请人ID int64 ApplicantId = 2; //申请人ID
@@ -317,7 +317,7 @@ message S2C_DisposeJoinResponse // ICustomRouteResponse
} }
///推送消息 ///推送消息
message S2C_ClubChange // ICustomRouteMessage,SocialRoute message Game2C_ClubChange // ICustomRouteMessage,GameRoute
{ {
ClubInfo Club = 1; ClubInfo Club = 1;
int32 ChangeType = 2; //变更类型 0.创建 1.解散 2.加入 3.退出 4.申请处理 int32 ChangeType = 2; //变更类型 0.创建 1.解散 2.加入 3.退出 4.申请处理

View File

@@ -1,4 +1,3 @@
// Route协议定义(需要定义1000以上、因为1000以内的框架预留) // Route协议定义(需要定义1000以上、因为1000以内的框架预留)
GateRoute = 1001 // Gate GateRoute = 1001 // Gate
SocialRoute = 1002 // Social GameRoute = 1002 // Game
GameRoute = 1003 // Game