UDPServer

Наследует: RefCounted < Object

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

Описание

Простой сервер, который открывает сокет UDP и возвращает подключенный PacketPeerUDP при получении новых пакетов. См. также PacketPeerUDP.connect_to_host().

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

Ниже приведен небольшой пример того, как его можно использовать:

# server_node.gd
class_name ServerNode
extends 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("Accepted peer: %s:%s" % [peer.get_packet_ip(), peer.get_packet_port()])
        print("Received data: %s" % [packet.get_string_from_utf8()])
        # Ответьте, чтобы он знал, что мы получили сообщение.
        peer.put_packet(packet)
        # Сохраните ссылку, чтобы мы могли продолжать связываться с удаленным партнером.
        peers.append(peer)

    for i in range(0, peers.size()):
        pass # Сделайте что-нибудь с подключенными пирами.
# client_node.gd
class_name ClientNode
extends Node

var udp = PacketPeerUDP.new()
var connected = false

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

func _process(delta):
    if !connected:
        # Попробуйте связаться с сервером
        udp.put_packet("The answer is... 42!".to_utf8_buffer())
    if udp.get_available_packet_count() > 0:
        print("Connected: %s" % udp.get_packet().get_string_from_utf8())
        connected = true

Свойства

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()

Определите максимальное количество ожидающих подключений, во время poll(), любое новое ожидающее подключение, превышающее это значение, будет автоматически сброшено. Установка этого значения на 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, если новое соединение недоступно. См. также is_connection_available(), PacketPeerUDP.connect_to_host().