using System.Net.Sockets; namespace FurinaImpact.Kcp { internal sealed class KcpSocketTransportForMultiplexConnection : KcpSocketTransport>, IKcpTransport> { private readonly Action _disposeAction; private Func>, object, bool> _exceptionHandler; private object _exceptionHandlerState; internal KcpSocketTransportForMultiplexConnection(UdpClient listener, int mtu) : base(listener, mtu) { } internal KcpSocketTransportForMultiplexConnection(UdpClient listener, int mtu, Action disposeAction) : base(listener, mtu) { _disposeAction = disposeAction; } protected override KcpMultiplexConnection Activate() => new KcpMultiplexConnection(this, _disposeAction); IKcpMultiplexConnection IKcpTransport>.Connection => Connection; protected override bool HandleException(Exception ex) { if (_exceptionHandler is not null) { return _exceptionHandler.Invoke(ex, this, _exceptionHandlerState); } return false; } public void SetExceptionHandler(Func>, object, bool> handler, object state) { _exceptionHandler = handler; _exceptionHandlerState = state; } } }