Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

DTLSServer

Успадковує: RefCounted < Object

Допоміжний клас для реалізації сервера DTLS.

Опис

Цей клас використовується для зберігання стану сервера DTLS. Після setup() він перетворює підключені PacketPeerUDP на PacketPeerDTLS, приймаючи їх через take_connection() як клієнтів DTLS. Під капотом цей клас використовується для зберігання стану DTLS і файлів cookie сервера. Причина, з якої потрібні стан і файли cookie, виходить за межі цієї документації.

Нижче наведено невеликий приклад того, як ним користуватися:

# server_node.gd
extends Node

var dtls := DTLSServer.new()
var server := UDPServer.new()
var peers = []

func _ready():
    server.listen(4242)
    var key = load("key.key") # Your private key.
    var cert = load("cert.crt") # Your X509 certificate.
    dtls.setup(key, cert)

func _process(delta):
    while server.is_connection_available():
        var peer: PacketPeerUDP = server.take_connection()
        var dtls_peer: PacketPeerDTLS = dtls.take_connection(peer)
        if dtls_peer.get_status() != PacketPeerDTLS.STATUS_HANDSHAKING:
            continue # It is normal that 50% of the connections fails due to cookie exchange.
        print("Peer connected!")
        peers.append(dtls_peer)

    for p in peers:
        p.poll() # Must poll to update the state.
        if p.get_status() == PacketPeerDTLS.STATUS_CONNECTED:
            while p.get_available_packet_count() > 0:
                print("Received message from client: %s" % p.get_packet().get_string_from_utf8())
                p.put_packet("Hello DTLS client".to_utf8_buffer())
# client_node.gd
extends Node

var dtls := PacketPeerDTLS.new()
var udp := PacketPeerUDP.new()
var connected = false

func _ready():
    udp.connect_to_host("127.0.0.1", 4242)
    dtls.connect_to_peer(udp, false) # Use true in production for certificate validation!

func _process(delta):
    dtls.poll()
    if dtls.get_status() == PacketPeerDTLS.STATUS_CONNECTED:
        if !connected:
            # Try to contact server
            dtls.put_packet("The answer is... 42!".to_utf8_buffer())
        while dtls.get_available_packet_count() > 0:
            print("Connected: %s" % dtls.get_packet().get_string_from_utf8())
            connected = true

Методи

Error

setup(server_options: TLSOptions)

PacketPeerDTLS

take_connection(udp_peer: PacketPeerUDP)


Описи методів

Error setup(server_options: TLSOptions) 🔗

Налаштування сервера DTLS для використання даного server_options. Див. TLSOptions.server().


PacketPeerDTLS take_connection(udp_peer: PacketPeerUDP) 🔗

Спробуйте розпочати ручку DTLS із заданою udp_peer, яка повинна бути вже підключена (див. PacketPeerUDP.connect_to_host()).

Примітка: Ви повинні перевірити, що стан повернення PacketPeerUDP є PacketPeerDTLS. STATUS_HANDSHAKING, оскільки це нормально, що 50% нових з'єднань буде недійсним через обмін cookie.