reckfellENGINE

UdpServer

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

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

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

Простой сервер, который открывает сокет UDP и возвращает подключенный PacketPeerUdp при получении новых пакетов. См. также PacketPeerUdp.ConnectToHost. После запуска сервера (UdpServer.Listen) вам нужно будет UdpServer.Poll его через регулярные интервалы (например, внутри Entity._Process), чтобы он обрабатывал новые пакеты, доставляя их в соответствующий PacketPeerUdp и принимая новые соединения. Ниже приведен небольшой пример того, как его можно использовать:

C#
// ServerNode.cs
using Reckfell;
using System.Collections.Generic;

public partial class ServerNode : Entity
{
    private UdpServer _server = new UdpServer();
    private List<PacketPeerUdp> _peers  = new List<PacketPeerUdp>();

    public override void _Ready()
    {
        _server.Listen(4242);
    }

    public override void _Process(double delta)
    {
        _server.Poll(); // Important!
        if (_server.IsConnectionAvailable())
        {
            PacketPeerUdp peer = _server.TakeConnection();
            byte[] packet = peer.GetPacket();
            ReckfellApi.Print($"Accepted Peer: {peer.GetPacketIP()}:{peer.GetPacketPort()}");
            ReckfellApi.Print($"Received Data: {packet.GetStringFromUtf8()}");
            // Reply so it knows we received the message.
            peer.PutPacket(packet);
            // Keep a reference so we can keep contacting the remote peer.
            _peers.Add(peer);
        }
        foreach (var peer in _peers)
        {
            // Do something with the peers.
        }
    }
}
C#
// ClientNode.cs
using Reckfell;

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

    public override void _Ready()
    {
        _udp.ConnectToHost("127.0.0.1", 4242);
    }

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

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

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

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

Свойства1

MaxPendingConnectionsСвойство
# MaxPendingConnections
C#
public int MaxPendingConnections { get; set; }

Определите максимальное количество ожидающих подключений, во время UdpServer.Poll, любое новое ожидающее подключение, превышающее это значение, будет автоматически сброшено. Установка этого значения на 0 фактически предотвращает принятие любого нового ожидающего подключения (например, когда все ваши игроки подключились).

Методы9

GetLocalPortint
# GetLocalPort
C#
public int GetLocalPort();

Возвращает локальный порт, который прослушивает этот сервер.

Возвращает int
GetMaxPendingConnectionsint
# GetMaxPendingConnections
C#
public int GetMaxPendingConnections();
Возвращает int
IsConnectionAvailablebool
# IsConnectionAvailable
C#
public bool IsConnectionAvailable();

Возвращает true, если на сокете был получен пакет с новой комбинацией адреса/порта.

Возвращает bool
IsListeningbool
# IsListening
C#
public bool IsListening();

Возвращает true, если сокет открыт и прослушивает порт.

Слушай.

Возвращает bool
ListenError
# Listen
C#
public Error Listen(ushort port, string bindAddress = "*");

Запускает сервер, открывая сокет UDP, прослушивающий указанный port. Вы можете дополнительно указать bind_address, чтобы прослушивать только пакеты, отправленные на этот адрес. См. также PacketPeerUdp.Bind.

Параметры
ИмяТипПо умолчанию
portushort—
bindAddressstring"*"
Возвращает Error
PollError
# Poll
C#
public Error Poll();

Вызывайте этот метод через регулярные интервалы (например, внутри Entity._Process) для обработки новых пакетов. Любой пакет из известной пары адрес/порт будет доставлен в соответствующий PacketPeerUdp, тогда как любой пакет, полученный из неизвестной пары адрес/порт, будет добавлен как ожидающее соединение (см. UdpServer.IsConnectionAvailable и UdpServer.TakeConnection). Максимальное количество ожидающих соединений определяется через UdpServer.MaxPendingConnections.

Возвращает Error
SetMaxPendingConnectionsvoid
# SetMaxPendingConnections
C#
public void SetMaxPendingConnections(int maxPendingConnections);
Параметры
ИмяТипПо умолчанию
maxPendingConnectionsint—
Stopvoid
# Stop
C#
public void Stop();

Останавливает сервер, закрывая сокет UDP, если он открыт. Закроет все подключенные PacketPeerUdp, принятые через UdpServer.TakeConnection (удаленные пиры не будут уведомлены).

TakeConnectionPacketPeerUdp
# TakeConnection
C#
public PacketPeerUdp TakeConnection();

Возвращает первое ожидающее соединение (подключенное к соответствующему адресу/порту). Возвращает null, если новое соединение недоступно. См. также UdpServer.IsConnectionAvailable, PacketPeerUdp.ConnectToHost.

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

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

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

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