using System;
using System.Threading.Tasks;
using LiteNetLib;
namespace GameCult.Networking
{
///
/// Routes CultNet schema-v0 document messages through a .
///
public sealed class CultNetDatabaseServer : IDisposable
{
private readonly Server _server;
private readonly CultNetDatabase _database;
private readonly Func _snapshotHandler;
private readonly Func _putHandler;
private readonly Func _deleteHandler;
private bool _disposed;
///
/// Creates and attaches a database message bridge to a server.
///
public CultNetDatabaseServer(Server server, CultNetDatabase database)
{
_server = server ?? throw new ArgumentNullException(nameof(server));
_database = database ?? throw new ArgumentNullException(nameof(database));
_snapshotHandler = HandleSnapshotRequestAsync;
_putHandler = HandlePutAsync;
_deleteHandler = HandleDeleteAsync;
_server.OnCultNet(_snapshotHandler);
_server.OnCultNet(_putHandler);
_server.OnCultNet(_deleteHandler);
}
///
/// Gets the database used by this bridge.
///
public CultNetDatabase Database => _database;
///
/// Applies a raw put message through the database shard policy.
///
public Task