Common networking stuffs
This commit is contained in:
38
Abstract/HandlerManager.cs
Normal file
38
Abstract/HandlerManager.cs
Normal file
@@ -0,0 +1,38 @@
|
||||
using Serilog;
|
||||
|
||||
namespace CommonSocketLibrary.Abstract
|
||||
{
|
||||
public abstract class HandlerManager<Client, Handler>
|
||||
{
|
||||
private readonly IDictionary<int, Handler> _handlers;
|
||||
protected readonly ILogger _logger;
|
||||
|
||||
public IDictionary<int, Handler> Handlers { get => _handlers; }
|
||||
|
||||
|
||||
public HandlerManager(ILogger logger)
|
||||
{
|
||||
_handlers = new Dictionary<int, Handler>();
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
|
||||
protected void Add(int op, Handler handler)
|
||||
{
|
||||
_handlers.Add(op, handler);
|
||||
}
|
||||
|
||||
public async Task Execute<T>(Client sender, int opcode, T val)
|
||||
{
|
||||
if (opcode < 0 || !_handlers.TryGetValue(opcode, out Handler? handler) || handler == null)
|
||||
{
|
||||
_logger.Warning("Invalid opcode received: " + opcode);
|
||||
return;
|
||||
}
|
||||
|
||||
await Execute(sender, handler, val);
|
||||
}
|
||||
|
||||
protected abstract Task Execute<T>(Client sender, Handler handler, T value);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user