mirror of
https://github.com/MikuLeaks/KianaBH3.git
synced 2025-12-14 05:44:34 +01:00
Init enter game
This commit is contained in:
48
KcpSharp/Base/KcpSocketTransportForConversation.cs
Normal file
48
KcpSharp/Base/KcpSocketTransportForConversation.cs
Normal file
@@ -0,0 +1,48 @@
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
|
||||
namespace KianaBH.KcpSharp.Base;
|
||||
|
||||
/// <summary>
|
||||
/// Socket transport for KCP conversation.
|
||||
/// </summary>
|
||||
internal sealed class KcpSocketTransportForConversation : KcpSocketTransport<KcpConversation>,
|
||||
IKcpTransport<KcpConversation>
|
||||
{
|
||||
private readonly long? _conversationId;
|
||||
private readonly KcpConversationOptions? _options;
|
||||
private readonly IPEndPoint _remoteEndPoint;
|
||||
|
||||
private Func<Exception, IKcpTransport<KcpConversation>, object?, bool>? _exceptionHandler;
|
||||
private object? _exceptionHandlerState;
|
||||
|
||||
|
||||
internal KcpSocketTransportForConversation(UdpClient listener, IPEndPoint endPoint, long? conversationId,
|
||||
KcpConversationOptions? options)
|
||||
: base(listener, options?.Mtu ?? KcpConversationOptions.MtuDefaultValue)
|
||||
{
|
||||
_conversationId = conversationId;
|
||||
_remoteEndPoint = endPoint;
|
||||
_options = options;
|
||||
}
|
||||
|
||||
public void SetExceptionHandler(Func<Exception, IKcpTransport<KcpConversation>, object?, bool> handler,
|
||||
object? state)
|
||||
{
|
||||
_exceptionHandler = handler;
|
||||
_exceptionHandlerState = state;
|
||||
}
|
||||
|
||||
protected override KcpConversation Activate()
|
||||
{
|
||||
return _conversationId.HasValue
|
||||
? new KcpConversation(_remoteEndPoint, this, _conversationId.GetValueOrDefault(), _options)
|
||||
: new KcpConversation(_remoteEndPoint, this, _options);
|
||||
}
|
||||
|
||||
protected override bool HandleException(Exception ex)
|
||||
{
|
||||
if (_exceptionHandler is not null) return _exceptionHandler.Invoke(ex, this, _exceptionHandlerState);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user