UdpServer
Helper class to implement a UDP server.
Helper class to implement a UDP server.
A simple server that opens a UDP socket and returns connected PacketPeerUdp upon receiving new packets. See also PacketPeerUdp.ConnectToHost.
After starting the server (UdpServer.Listen), you will need to UdpServer.Poll it at regular intervals (e.g. inside Entity._Process) for it to process new packets, delivering them to the appropriate PacketPeerUdp, and taking new connections.
Below a small example of how it can be used:
// 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;
}
}
}Declarations checked against C# SDK 1.0.0. Expand a name to see declarations and documentation.
Constructors1
UdpServerConstructor
public UdpServer();Properties1
MaxPendingConnectionsProperty
public int MaxPendingConnections { get; set; }Define the maximum number of pending connections, during UdpServer.Poll, any new pending connection exceeding that value will be automatically dropped. Setting this value to 0 effectively prevents any new pending connection to be accepted (e.g. when all your players have connected).
Methods9
GetLocalPortint
public int GetLocalPort();Returns the local port this server is listening to.
intGetMaxPendingConnectionsint
public int GetMaxPendingConnections();intIsConnectionAvailablebool
public bool IsConnectionAvailable();Returns true if a packet with a new address/port combination was received on the socket.
boolIsListeningbool
public bool IsListening();Returns true if the socket is open and listening on a port.
boolListenError
public Error Listen(ushort port, string bindAddress = "*");Starts the server by opening a UDP socket listening on the given port. You can optionally specify a bind_address to only listen for packets sent to that address. See also PacketPeerUdp.Bind.
| Name | Type | Default |
|---|---|---|
port | ushort | — |
bindAddress | string | "*" |
ErrorPollError
public Error Poll();Call this method at regular intervals (e.g. inside Entity._Process) to process new packets. Any packet from a known address/port pair will be delivered to the appropriate PacketPeerUdp, while any packet received from an unknown address/port pair will be added as a pending connection (see UdpServer.IsConnectionAvailable and UdpServer.TakeConnection). The maximum number of pending connections is defined via UdpServer.MaxPendingConnections.
ErrorSetMaxPendingConnectionsvoid
public void SetMaxPendingConnections(int maxPendingConnections);| Name | Type | Default |
|---|---|---|
maxPendingConnections | int | — |
Stopvoid
public void Stop();Stops the server, closing the UDP socket if open. Will close all connected PacketPeerUdp accepted via UdpServer.TakeConnection (remote peers will not be notified).
TakeConnectionPacketPeerUdp
public PacketPeerUdp TakeConnection();Returns the first pending connection (connected to the appropriate address/port). Will return null if no new connection is available. See also UdpServer.IsConnectionAvailable, PacketPeerUdp.ConnectToHost.
PacketPeerUdp