using System.Collections.Concurrent; using DotNetty.Buffers; using DotNetty.Transport.Channels; using log4net; namespace HybirdFrameworkServices.Netty; public class SessionMgr { private static readonly ILog Log = LogManager.GetLogger(typeof(SessionMgr)); private static readonly ConcurrentDictionary Dictionary = new ConcurrentDictionary(); public static void RegisterSession(string key, IoSession ioSession) { ioSession.Key = key; Dictionary.GetOrAdd(key, ioSession); } public static void UnregisterSession(IChannel channel) { IoSession session = ChannelUtils.GetSessionBy(channel); IoSession? outSession; Dictionary.Remove(session.Key, out outSession); session.Close(); } public static void Broadcast(IByteBuffer buffer) { foreach (IoSession session in Dictionary.Values) { session.Send(buffer); } } }