reckfellENGINE

UdpServer

Helper class to implement a UDP server.

On this page
class UdpServerReckfellSharpInherits RefCounted

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:

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;
        }
    }
}

Declarations checked against C# SDK 1.0.0. Expand a name to see declarations and documentation.

Constructors1

UdpServerConstructor
# UdpServer
C#
public UdpServer();

Properties1

MaxPendingConnectionsProperty
# MaxPendingConnections
C#
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
# GetLocalPort
C#
public int GetLocalPort();

Returns the local port this server is listening to.

Returns int
GetMaxPendingConnectionsint
# GetMaxPendingConnections
C#
public int GetMaxPendingConnections();
Returns int
IsConnectionAvailablebool
# IsConnectionAvailable
C#
public bool IsConnectionAvailable();

Returns true if a packet with a new address/port combination was received on the socket.

Returns bool
IsListeningbool
# IsListening
C#
public bool IsListening();

Returns true if the socket is open and listening on a port.

Returns bool
ListenError
# Listen
C#
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.

Parameters
NameTypeDefault
portushort—
bindAddressstring"*"
Returns Error
PollError
# Poll
C#
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.

Returns Error
SetMaxPendingConnectionsvoid
# SetMaxPendingConnections
C#
public void SetMaxPendingConnections(int maxPendingConnections);
Parameters
NameTypeDefault
maxPendingConnectionsint—
Stopvoid
# Stop
C#
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
# TakeConnection
C#
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.

Returns PacketPeerUdp
Reckfell Engine documentationBack to top ↑
QUICK LINKSGetting startedEntity hierarchyC# & .NET 10Scenes and prefabs
Reckfell guides and full API K
reckfellENGINE
RECKFELL ACCOUNT

Sign in

Sign in to your Reckfell account.

One account for the entire Reckfell platform.