You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
using System.Collections.Concurrent;
|
|
|
|
|
using DotNetty.Buffers;
|
|
|
|
|
using DotNetty.Transport.Channels;
|
|
|
|
|
using log4net;
|
|
|
|
|
|
|
|
|
|
namespace HybirdFrameworkDriver.TcpServer;
|
|
|
|
|
|
|
|
|
|
public class SessionMgr
|
|
|
|
|
{
|
|
|
|
|
private static readonly ILog Log = LogManager.GetLogger(typeof(SessionMgr));
|
|
|
|
|
|
|
|
|
|
private static readonly ConcurrentDictionary<string, IoSession> Dictionary =
|
|
|
|
|
new ConcurrentDictionary<string, IoSession>();
|
|
|
|
|
|
|
|
|
|
public static void RegisterSession(string key, IoSession ioSession)
|
|
|
|
|
{
|
|
|
|
|
ioSession.Key = key;
|
|
|
|
|
IoSession? session;
|
|
|
|
|
Dictionary.Remove(ioSession.Key, out session);
|
|
|
|
|
Dictionary.AddOrUpdate(key, ioSession, (k, oldSession) => 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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|