reckfellENGINE

DtlsServer

Вспомогательный класс для реализации сервера DTLS.

На этой странице
class DtlsServerReckfellSharpНаследует RefCounted

Вспомогательный класс для реализации сервера DTLS.

Этот класс используется для хранения состояния сервера DTLS. После DtlsServer.Setup он преобразует подключенные PacketPeerUdp в PacketPeerDtls, принимая их через DtlsServer.TakeConnection как клиентов DTLS. Под капотом этот класс используется для хранения состояния DTLS и файлов cookie сервера. Причина, по которой необходимы состояние и файлы cookie, выходит за рамки этой документации. Ниже приведен небольшой пример того, как его использовать:

C#
// ServerNode.cs
using Reckfell;

public partial class ServerNode : Entity
{
    private DtlsServer _dtls = new DtlsServer();
    private UdpServer _server = new UdpServer();
    private Reckfell.Collections.Array<PacketPeerDtls> _peers = [];

    public override void _Ready()
    {
        _server.Listen(4242);
        var key = ReckfellApi.Load<CryptoKey>("key.key"); // Your private key.
        var cert = ReckfellApi.Load<X509Certificate>("cert.crt"); // Your X509 certificate.
        _dtls.Setup(TlsOptions.Server(key, cert));
    }

    public override void _Process(double delta)
    {
        while (_server.IsConnectionAvailable())
        {
            PacketPeerUdp peer = _server.TakeConnection();
            PacketPeerDtls dtlsPeer = _dtls.TakeConnection(peer);
            if (dtlsPeer.GetStatus() != PacketPeerDtls.Status.Handshaking)
            {
                continue; // It is normal that 50% of the connections fails due to cookie exchange.
            }
            ReckfellApi.Print("Peer connected!");
            _peers.Add(dtlsPeer);
        }

        foreach (var p in _peers)
        {
            p.Poll(); // Must poll to update the state.
            if (p.GetStatus() == PacketPeerDtls.Status.Connected)
            {
                while (p.GetAvailablePacketCount() > 0)
                {
                    ReckfellApi.Print($"Received Message From Client: {p.GetPacket().GetStringFromUtf8()}");
                    p.PutPacket("Hello DTLS Client".ToUtf8Buffer());
                }
            }
        }
    }
}
C#
// ClientNode.cs
using Reckfell;
using System.Text;

public partial class ClientNode : Entity
{
    private PacketPeerDtls _dtls = new PacketPeerDtls();
    private PacketPeerUdp _udp = new PacketPeerUdp();
    private bool _connected = false;

    public override void _Ready()
    {
        _udp.ConnectToHost("127.0.0.1", 4242);
        _dtls.ConnectToPeer(_udp, validateCerts: false); // Use true in production for certificate validation!
    }

    public override void _Process(double delta)
    {
        _dtls.Poll();
        if (_dtls.GetStatus() == PacketPeerDtls.Status.Connected)
        {
            if (!_connected)
            {
                // Try to contact server
                _dtls.PutPacket("The Answer Is..42!".ToUtf8Buffer());
            }
            while (_dtls.GetAvailablePacketCount() > 0)
            {
                ReckfellApi.Print($"Connected: {_dtls.GetPacket().GetStringFromUtf8()}");
                _connected = true;
            }
        }
    }
}

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы1

DtlsServerКонструктор
# DtlsServer
C#
public DtlsServer();

Методы2

SetupError
# Setup
C#
public Error Setup(TlsOptions serverOptions);

Настройте сервер DTLS для использования указанного server_options. См. TlsOptions.Server.

Параметры
ИмяТипПо умолчанию
serverOptionsTlsOptions—
Возвращает Error
TakeConnectionPacketPeerDtls
# TakeConnection
C#
public PacketPeerDtls TakeConnection(PacketPeerUdp udpPeer);

Попробуйте инициировать рукопожатие DTLS с заданным udp_peer, который должен быть уже подключен (см. PacketPeerUdp.ConnectToHost). Примечание: Вы должны проверить, что состояние возвращаемого PacketPeerUDP равно PacketPeerDtls.Status.Handshaking, так как нормально, что 50% новых подключений будут недействительными из-за обмена cookie-файлами.

Параметры
ИмяТипПо умолчанию
udpPeerPacketPeerUdp—
Возвращает PacketPeerDtls
Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.