using System; using System.Net; using System.Net.Sockets; namespace KcpSharp { internal sealed class KcpSocketTransportForMultiplexConnection : KcpSocketTransport>, IKcpTransport> { private readonly Action? _disposeAction; private Func>, object?, bool>? _exceptionHandler; private object? _exceptionHandlerState; internal KcpSocketTransportForMultiplexConnection(UdpClient socket, int mtu) : base(socket, mtu) { } internal KcpSocketTransportForMultiplexConnection(UdpClient socket, int mtu, Action? disposeAction) : base(socket, 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; } } }