UdpServer
Вспомогательный класс для реализации UDP-сервера.
Вспомогательный класс для реализации UDP-сервера.
Простой сервер, который открывает сокет UDP и возвращает подключенный PacketPeerUdp при получении новых пакетов. См. также PacketPeerUdp.ConnectToHost.
После запуска сервера (UdpServer.Listen) вам нужно будет UdpServer.Poll его через регулярные интервалы (например, внутри Entity._Process), чтобы он обрабатывал новые пакеты, доставляя их в соответствующий PacketPeerUdp и принимая новые соединения.
Ниже приведен небольшой пример того, как его можно использовать:
// 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.
}
}
}// 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Конструктор
public UdpServer();Свойства1
MaxPendingConnectionsСвойство
public int MaxPendingConnections { get; set; }Определите максимальное количество ожидающих подключений, во время UdpServer.Poll, любое новое ожидающее подключение, превышающее это значение, будет автоматически сброшено. Установка этого значения на 0 фактически предотвращает принятие любого нового ожидающего подключения (например, когда все ваши игроки подключились).
Методы9
GetLocalPortint
public int GetLocalPort();Возвращает локальный порт, который прослушивает этот сервер.
intGetMaxPendingConnectionsint
public int GetMaxPendingConnections();intIsConnectionAvailablebool
public bool IsConnectionAvailable();Возвращает true, если на сокете был получен пакет с новой комбинацией адреса/порта.
boolIsListeningbool
public bool IsListening();Возвращает true, если сокет открыт и прослушивает порт.
Слушай.
boolListenError
public Error Listen(ushort port, string bindAddress = "*");Запускает сервер, открывая сокет UDP, прослушивающий указанный port. Вы можете дополнительно указать bind_address, чтобы прослушивать только пакеты, отправленные на этот адрес. См. также PacketPeerUdp.Bind.
| Имя | Тип | По умолчанию |
|---|---|---|
port | ushort | — |
bindAddress | string | "*" |
ErrorPollError
public Error Poll();Вызывайте этот метод через регулярные интервалы (например, внутри Entity._Process) для обработки новых пакетов. Любой пакет из известной пары адрес/порт будет доставлен в соответствующий PacketPeerUdp, тогда как любой пакет, полученный из неизвестной пары адрес/порт, будет добавлен как ожидающее соединение (см. UdpServer.IsConnectionAvailable и UdpServer.TakeConnection). Максимальное количество ожидающих соединений определяется через UdpServer.MaxPendingConnections.
ErrorSetMaxPendingConnectionsvoid
public void SetMaxPendingConnections(int maxPendingConnections);| Имя | Тип | По умолчанию |
|---|---|---|
maxPendingConnections | int | — |
Stopvoid
public void Stop();Останавливает сервер, закрывая сокет UDP, если он открыт. Закроет все подключенные PacketPeerUdp, принятые через UdpServer.TakeConnection (удаленные пиры не будут уведомлены).
TakeConnectionPacketPeerUdp
public PacketPeerUdp TakeConnection();Возвращает первое ожидающее соединение (подключенное к соответствующему адресу/порту). Возвращает null, если новое соединение недоступно. См. также UdpServer.IsConnectionAvailable, PacketPeerUdp.ConnectToHost.
PacketPeerUdp