UDPServer

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

Допоможець класу для реалізації сервера UDP.

Опис

Простий сервер, який відкриває UDP-сокет і повертає підключений PacketPeerUDP після отримання нових пакетів. Дивіться також PacketPeerUDP.connect_to_host().

Після запуску сервера (listen()) вам потрібно буде poll() проводити його через регулярні проміжки часу (наприклад, усередині Node._process()), щоб він обробляв нові пакети, доставляючи їх до відповідного PacketPeerUDP і встановлюючи нові з’єднання.

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

# server_node.gd
class_name ServerNode
extenda Node

var server = UDPServer.new()
var peers = []

func _ready():
    server.listen(4242)

func _process(delta):
    server.poll() # Важливо!
    if server.is_connection_available():
        var peer = server.take_connection()
        var packet = peer.get_packet()
        print("Прийнятий вузол: %s:%s" % [peer.get_packet_ip(), peer.get_packet_port()])
        print("Отримано дані: %s" % [packet.get_string_from_utf8()])
        # Відповісти, щоб знати, що ми отримали повідомлення.
        peer.put_packet(пакет)
        # Зберігайте посилання, щоб ми могли продовжувати зв’язуватися з віддаленим партнером.
        peers.append(peer)

    for i in range(0, peers.size()):
        pass # Зробіть щось із підключеними одноранговими вузлами.
# client_node.gd
class_name ClientNode
extends Node

var udp = PacketPeerUDP.new()
varconnected = false

func _ready():
    udp.connect_to_host("127.0.0.1", 4242)

func _process(delta):
    if !connected:
        # Спробуйте зв'язатися з сервером
        udp.put_packet("Відповідь... 42!".to_utf8_buffer())
    if udp.get_available_packet_count() > 0:
        print("Підключено: %s" % udp.get_packet().get_string_from_utf8())
        connected = ture

Властивості

int

max_pending_connections

16

Методи

int

get_local_port() const

bool

is_connection_available() const

bool

is_listening() const

Error

listen(port: int, bind_address: String = "*")

Error

poll()

void

stop()

PacketPeerUDP

take_connection()


Описи властивостей

int max_pending_connections = 16 🔗

  • void set_max_pending_connections(value: int)

  • int get_max_pending_connections()

Визначте максимальну кількість кінцевих з'єднань, під час методичного опитування, будь-яке нове з'єднання, що перевищує це значення буде автоматично скидати. Налаштування цього значення 0 ефективно запобігає будь-якому новому з'єднанню згинання (наприклад, коли всі ваші гравці підключені).


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

int get_local_port() const 🔗

Повертає локальний порт на цей сервер.


bool is_connection_available() const 🔗

Повертаємо true, якщо було отримано пакет з новою адресною/портовою комбінацією.


bool is_listening() const 🔗

Повертає true, якщо розетка відкрита і слухає на порт.


Error listen(port: int, bind_address: String = "*") 🔗

Почати сервер, відкривши розетку UDP, прослуховуючи на даній port. Ви можете додатково вказати bind_address для лише прослуховування пакетів, відправлених на цю адресу. Дивитися також PacketPeerUDP.bind().


Error poll() 🔗

Викликайте цей метод через регулярні проміжки часу (наприклад, всередині Node._process()) для обробки нових пакетів. Будь-який пакет з відомої пари адреса/порт буде доставлено до відповідного PacketPeerUDP, тоді як будь-який пакет, отриманий з невідомої пари адреса/порт, буде додано як очікуване з'єднання (див. is_connection_available() та take_connection()). Максимальна кількість очікуваних з'єднань визначається за допомогою max_pending_connections.


void stop() 🔗

Зупиняє сервер, закриваючи UDP-сокет, якщо він відкритий. Закриє всі підключені PacketPeerUDP, прийняті через take_connection() (віддалені вузли не будуть повідомлені).


PacketPeerUDP take_connection() 🔗

Повертаємо перше з'єднання з попереднім записом (включається до відповідної адреси/порту). Поверніть null, якщо немає нового підключення. method_connection_1, PacketPeerUDP.connect_to_host().