PL::TcpServer class

class TcpServer : public PL::NetworkServer

TCP server class.

Note

Listens on a single IPv6 socket and relies on lwIP dual-stack support (IPV6_V6ONLY disabled, the ESP-IDF default) to accept IPv4 clients as well, via IPv4-mapped IPv6 addresses. If dual-stack support is disabled, only IPv6 clients will be able to connect.

Public Functions

TcpServer(uint16_t port)

Creates a TCP server.

Parameters:

port – port

~TcpServer()

Note

Every derived class must call StopTask as the first statement of its own destructor so that TaskCode does not call HandleRequest on a partially destroyed object; the base destructor aborts if this was not done.

virtual esp_err_t Lock(TickType_t timeout = portMAX_DELAY) override

Locks the object.

Parameters:

timeout – timeout in FreeRTOS ticks

Returns:

error code

virtual esp_err_t Unlock() override

Unlocks the object.

Returns:

error code

virtual esp_err_t Enable() override

Enables the server.

Returns:

error code

virtual esp_err_t Disable() override

Disables the server.

Returns:

error code

esp_err_t EnableNagleAlgorithm()

Enables the Nagle’s algorithm.

Returns:

error code

esp_err_t DisableNagleAlgorithm()

Disables the Nagle’s algorithm.

Returns:

error code

esp_err_t EnableKeepAlive()

Enables the keep-alive packets.

Returns:

error code

esp_err_t DisableKeepAlive()

Disables the keep-alive packets.

Returns:

error code

virtual bool IsEnabled() override

Checks if the server is enabled.

Returns:

true if the server is enabled

virtual uint16_t GetPort() override

Gets listening port.

Returns:

port

virtual esp_err_t SetPort(uint16_t port) override

Sets listening port.

Parameters:

port – port

Returns:

error code

virtual size_t GetMaxNumberOfClients() override

Gets the maximum number of server clients.

Returns:

number of clients

virtual esp_err_t SetMaxNumberOfClients(size_t maxNumberOfClients) override

Sets the maximum number of server clients.

Parameters:

maxNumberOfClients – number of clients

Returns:

error code

std::vector<std::shared_ptr<NetworkStream>> GetClientStreams()

Gets the connected client streams.

Returns:

client streams

esp_err_t SetTaskParameters(const TaskParameters &taskParameters)

Sets the server task parameters.

Parameters:

taskParameters – task parameters

Returns:

error code

esp_err_t SetKeepAliveIdleTime(int seconds)

Sets the idle time before the keep-alive packets are sent.

Parameters:

seconds – time in seconds

Returns:

error code

esp_err_t SetKeepAliveInterval(int seconds)

Sets the keep-alive packet interval.

Parameters:

seconds – interval in seconds

Returns:

error code

esp_err_t SetKeepAliveCount(int count)

Sets the number of the keep-alive packets.

Parameters:

count – number of packets

Returns:

error code

std::string GetName()

Gets the server name.

Returns:

name

void SetName(const std::string &name)

Sets the server name.

Parameters:

name – name

Public Members

Event<TcpServer, NetworkStream&> clientConnectedEvent

Client connected event.

Event<TcpServer, NetworkStream&> clientDisconnectedEvent

Client disconnected event.

Event<Server> enabledEvent

server enabled event

Event<Server> disabledEvent

server disabled event

Public Static Attributes

static const TaskParameters defaultTaskParameters

Default server task parameters.

static constexpr size_t defaultMaxNumberOfClients = 1

Default maximum number of server clients.

static constexpr int defaultKeepAliveIdleTime = 7200

Default idle time before the keep-alive packets are sent in seconds.

static constexpr int defaultKeepAliveInterval = 75

Default keep-alive packet interval in seconds.

static constexpr int defaultKeepAliveCount = 9

Default number of the keep-alive packets.

Protected Functions

esp_err_t StopTask()

Stops the server task, closes the client streams and waits for the task to exit.

Note

Must be called as the first statement of the destructor of every derived class so that TaskCode does not call HandleRequest on a partially destroyed object. Aborts if called from the server task itself, since it cannot wait for its own task to exit.

Returns:

error code

virtual esp_err_t HandleRequest(NetworkStream &clientStream) = 0

Handles the TCP client request.

Note

Called from a single internal task that also accepts new clients and services every other connected client in turn, and holds the server’s own lock while doing so. A slow or blocking implementation delays new connections, all other clients, and any other thread’s calls into this server’s public API until it returns.

Parameters:

clientStream – client stream

Returns:

error code