mirror of
https://github.com/mysensors/MySensors.git
synced 2026-03-11 02:27:03 +01:00
The rules are in .tools/astyle/config/style.cfg and can also be reviewed at https://www.mysensors.org/view/260#coding-guidelines-core-library
122 lines
3.6 KiB
C++
122 lines
3.6 KiB
C++
/*
|
|
* The MySensors Arduino library handles the wireless radio link and protocol
|
|
* between your home built sensors/actuators and HA controller of choice.
|
|
* The sensors forms a self healing radio network with optional repeaters. Each
|
|
* repeater and gateway builds a routing tables in EEPROM which keeps track of the
|
|
* network topology allowing messages to be routed to nodes.
|
|
*
|
|
* Created by Marcelo Aquino <marceloaqno@gmail.org>
|
|
* Copyright (C) 2016 Marcelo Aquino
|
|
* Full contributor list: https://github.com/mysensors/MySensors/graphs/contributors
|
|
*
|
|
* Documentation: http://www.mysensors.org
|
|
* Support Forum: http://forum.mysensors.org
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* version 2 as published by the Free Software Foundation.
|
|
*
|
|
* Based on Arduino ethernet library, Copyright (c) 2010 Arduino LLC. All right reserved.
|
|
*/
|
|
|
|
#ifndef EthernetServer_h
|
|
#define EthernetServer_h
|
|
|
|
#include <list>
|
|
#include <vector>
|
|
#include "Server.h"
|
|
#include "IPAddress.h"
|
|
|
|
#ifdef ETHERNETSERVER_MAX_CLIENTS
|
|
#define ETHERNETSERVER_BACKLOG ETHERNETSERVER_MAX_CLIENTS //!< Maximum length to which the queue of pending connections may grow.
|
|
#else
|
|
#define ETHERNETSERVER_MAX_CLIENTS 10 //!< Default value for max_clients.
|
|
#define ETHERNETSERVER_BACKLOG 10 //!< Maximum length to which the queue of pending connections may grow.
|
|
#endif
|
|
|
|
class EthernetClient;
|
|
|
|
/**
|
|
* @brief EthernetServer class
|
|
*/
|
|
class EthernetServer : public Server
|
|
{
|
|
|
|
private:
|
|
uint16_t port; //!< @brief Port number for the network socket.
|
|
std::list<int> new_clients; //!< Socket list of new clients.
|
|
std::vector<int> clients; //!< @brief Socket list of clients.
|
|
uint16_t max_clients; //!< @brief The maximum number of allowed clients.
|
|
int sockfd; //!< @brief Network socket used to accept connections.
|
|
|
|
/**
|
|
* @brief Accept new clients if the total of connected clients is below max_clients.
|
|
*
|
|
*/
|
|
void _accept();
|
|
|
|
public:
|
|
/**
|
|
* @brief EthernetServer constructor.
|
|
*
|
|
* @param port number for the socket addresses.
|
|
* @param max_clients The maximum number allowed for connected clients.
|
|
*/
|
|
EthernetServer(uint16_t port, uint16_t max_clients = ETHERNETSERVER_MAX_CLIENTS);
|
|
/**
|
|
* @brief Listen for inbound connection request.
|
|
*
|
|
*/
|
|
virtual void begin();
|
|
/**
|
|
* @brief Listen on the specified ip for inbound connection request.
|
|
*
|
|
* @param addr IP address to bind to.
|
|
*/
|
|
void begin(IPAddress addr);
|
|
/**
|
|
* @brief Verifies if a new client has connected.
|
|
*
|
|
* @return @c true if a new client has connected, else @c false.
|
|
*/
|
|
bool hasClient();
|
|
/**
|
|
* @brief Get the new connected client.
|
|
*
|
|
* @return client class object if a new client has connected else -1.
|
|
*/
|
|
EthernetClient available();
|
|
/**
|
|
* @brief Write a byte to all clients.
|
|
*
|
|
* @param b byte to send.
|
|
* @return 0 if FAILURE or 1 if SUCCESS.
|
|
*/
|
|
virtual size_t write(uint8_t b);
|
|
/**
|
|
* @brief Write at most 'size' bytes to all clients.
|
|
*
|
|
* @param buffer to read from.
|
|
* @param size of the buffer.
|
|
* @return 0 if FAILURE else number of bytes sent.
|
|
*/
|
|
virtual size_t write(const uint8_t *buffer, size_t size);
|
|
/**
|
|
* @brief Write a null-terminated string to all clients.
|
|
*
|
|
* @param str String to write.
|
|
* @return 0 if FAILURE else number of characters sent.
|
|
*/
|
|
size_t write(const char *str);
|
|
/**
|
|
* @brief Write at most 'size' characters to all clients.
|
|
*
|
|
* @param buffer to read from.
|
|
* @param size of the buffer.
|
|
* @return 0 if FAILURE else the number of characters sent.
|
|
*/
|
|
size_t write(const char *buffer, size_t size);
|
|
};
|
|
|
|
#endif
|