添加聊天频道假如 聊天频道退出

This commit is contained in:
SnowShow 2025-04-16 11:53:56 +08:00
parent 5d0f1791a5
commit 3db55540ae
7 changed files with 85 additions and 13 deletions

View File

@ -4,5 +4,5 @@ using Fantasy.Entitas;
public class ChatChannel : Entity public class ChatChannel : Entity
{ {
public readonly HashSet<EntityReference<ChatUnit>> ChatUnits = new HashSet<EntityReference<ChatUnit>>(); public readonly HashSet<long> ChatUnits = new HashSet<long>();
} }

View File

@ -2,7 +2,7 @@
using Fantasy.Entitas; using Fantasy.Entitas;
public class ChatComponent : Entity public class ChatManageComponent : Entity
{ {
public readonly Dictionary<long,ChatUnit> ChatUnits = new Dictionary<long, ChatUnit>(); public readonly Dictionary<long,ChatUnit> ChatUnits = new Dictionary<long, ChatUnit>();
} }

View File

@ -22,7 +22,8 @@ public class OnCreateScene_InitEvent : AsyncEventSystem<OnCreateScene>
break; break;
case SceneType.Chat: case SceneType.Chat:
scene.AddComponent<ChatComponent>(); scene.AddComponent<ChatManageComponent>();
scene.AddComponent<ChatChannelCenterComponent>();
break; break;
} }

View File

@ -1,9 +1,58 @@
namespace Hotfix; using Fantasy;
namespace Hotfix;
public class ChatChannelSystem public static class ChatChannelSystem
{ {
public static void SendMessage(this ChatChannel self, string message)
{
var chatUnitManage = self.Scene.GetComponent<ChatManageComponent>();
}
/// <summary>
/// 进入聊天频道
/// </summary>
/// <param name="self"></param>
/// <param name="chatUnitId"></param>
/// <returns></returns>
public static bool JoinChatChannel(this ChatChannel self, long chatUnitId)
{
var chatUnitManage = self.Scene.GetComponent<ChatManageComponent>();
if (!chatUnitManage.ChatUnits.TryGetValue(chatUnitId,out _))
{
return false;
}
self.ChatUnits.Add(chatUnitId);
return true;
}
/// <summary>
/// 退出聊天频道
/// </summary>
/// <param name="self"></param>
/// <param name="chatUnitId"></param>
public static void ExitChatChannel(this ChatChannel self, long chatUnitId)
{
var chatUnitManage = self.Scene.GetComponent<ChatManageComponent>();
if (!self.ChatUnits.Contains(chatUnitId))
{
return;
}
self.ChatUnits.Remove(chatUnitId);
if (self.ChatUnits.Count == 0)
{
self.Dispose();
}
}
} }

View File

@ -2,9 +2,9 @@
using Fantasy.Entitas.Interface; using Fantasy.Entitas.Interface;
namespace Hotfix; namespace Hotfix;
public class ChatComponentDestroySystem : DestroySystem<ChatComponent> public class ChatManageComponentDestroySystem : DestroySystem<ChatManageComponent>
{ {
protected override void Destroy(ChatComponent self) protected override void Destroy(ChatManageComponent self)
{ {
foreach (var chatUnit in self.ChatUnits.Values.ToArray()) foreach (var chatUnit in self.ChatUnits.Values.ToArray())
{ {
@ -15,9 +15,9 @@ public class ChatComponentDestroySystem : DestroySystem<ChatComponent>
} }
} }
public static class ChatComponentSystem public static class ChatManageComponentSystem
{ {
public static void AddChatUnit(this ChatComponent self,ChatUnit chatUnit) public static void AddChatUnit(this ChatManageComponent self,ChatUnit chatUnit)
{ {
if (self.ChatUnits.ContainsKey(chatUnit.RuntimeId)) if (self.ChatUnits.ContainsKey(chatUnit.RuntimeId))
{ {
@ -27,7 +27,7 @@ public static class ChatComponentSystem
self.ChatUnits.Add(chatUnit.RuntimeId, chatUnit); self.ChatUnits.Add(chatUnit.RuntimeId, chatUnit);
} }
public static void RemoveChatUnit(this ChatComponent self, long accountId) public static void RemoveChatUnit(this ChatManageComponent self, long accountId)
{ {
if (!self.ChatUnits.Remove(accountId,out var chatUnit)) if (!self.ChatUnits.Remove(accountId,out var chatUnit))
{ {

View File

@ -0,0 +1,22 @@
using Fantasy;
namespace Hotfix;
public static class ChatChannelCenterComponentHelper
{
public static ChatChannel Apply(Scene scene, long chatChannelId)
{
return scene.GetComponent<ChatChannelCenterComponent>().Apply(chatChannelId);
}
public static bool TryGetChannel(Scene scene, long chatChannelId,out ChatChannel channel)
{
return scene.GetComponent<ChatChannelCenterComponent>().TryGetChannel(chatChannelId,out channel);
}
public static bool RemoveChannel(Scene scene, long chatChannelId)
{
return scene.GetComponent<ChatChannelCenterComponent>().RemoveChannel(chatChannelId);
}
}

View File

@ -6,12 +6,12 @@ public class ChatComponentHelper
{ {
public static void AddChatUnit(Scene scene,ChatUnit chatUnit) public static void AddChatUnit(Scene scene,ChatUnit chatUnit)
{ {
scene.GetComponent<ChatComponent>().AddChatUnit(chatUnit); scene.GetComponent<ChatManageComponent>().AddChatUnit(chatUnit);
} }
public static void RemoveChatUnit(Scene scene,long accountId) public static void RemoveChatUnit(Scene scene,long accountId)
{ {
scene.GetComponent<ChatComponent>().RemoveChatUnit(accountId); scene.GetComponent<ChatManageComponent>().RemoveChatUnit(accountId);
} }
} }