PC-20230316NUNE\Administrator 894100ae37 提交Unity 联机Pro
2024-08-17 14:27:18 +08:00

76 lines
1.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Cysharp.Threading.Tasks;
using Google.Protobuf;
using Plugins.JNGame.Network.Entity;
using Plugins.JNGame.Network.Util;
using Plugins.JNGame.System;
using Plugins.JNGame.Util;
namespace Plugins.JNGame.Network.Group
{
public class JNClientGroup<T> : SystemBase where T : JNClientBase
{
//创建通知
protected EventDispatcher _event = new();
//客户端组
public List<T> group = new List<T>();
public override async Task OnInit()
{
await UniTask.NextFrame();
}
public override void OnClose()
{
base.OnClose();
foreach (var client in group)
{
client.OnClose();
}
group.Clear();
}
public virtual void AddClient(T client)
{
group.Add(client);
client.SetEvent(_event);
client.OnInit();
}
public virtual void RemoveClient(T client)
{
client.SetEvent(new EventDispatcher());
client.OnClose();
group.Remove(client);
}
//外部监听消息
public void AddListener(int hId,Action<byte[]> listener)
{
_event.AddListener($"{hId}",listener);
}
//删除外部监听
public void RemoveListener(int hId,Action<byte[]> listener)
{
_event.RemoveListener($"{hId}",listener);
}
//向服务器发送消息
public void Send(int hId,IMessage data = null,Func<T,bool> filter = null)
{
filter ??= (T client) => true;
group.ForEach(child =>
{
if (filter(child))
{
child.Send(hId,data);
}
});
}
}
}