14#include <QNEthernetClient.h>
16#include "util/PrintUtils.h"
20using qindesign::network::EthernetClient;
40 std::list<Print *> print_targets;
41 std::list<EthernetClient*> eth_targets;
46 void add(Print *target) { print_targets.push_back(target); }
47 void add(EthernetClient *target) { eth_targets.push_back(target); }
50 void remove(Print *target) { print_targets.remove(target); }
51 void remove(EthernetClient *target) { eth_targets.remove(target); }
53 size_t size()
const {
return print_targets.size() + eth_targets.size(); }
56 virtual size_t write(uint8_t b)
override {
58 if(serial && Serial.availableForWrite())
success &= Serial.write(b) == 1;
59 for (
auto &target : print_targets)
if (target)
success &= target->write(b) == 1;
60 for (
auto &target : eth_targets)
if (target)
success &= target->writeFully(b) == 1;
64 size_t write(
const uint8_t *buffer,
size_t size)
override {
66 if(serial && Serial.availableForWrite())
success &= Serial.write(buffer,
size) ==
size;
67 for (
auto &target : print_targets)
if (target)
success &= qindesign::network::util::writeFully(*target, buffer,
size) ==
size;
68 for (
auto &target : eth_targets)
if (target)
success &= target->writeFully(buffer,
size) ==
size;
77 if(serial && Serial) Serial.flush();
78 for (
auto &target : print_targets)
if (target) target->flush();
79 for (
auto &target : eth_targets)
if (target) target->flush();
A "multiplexer" for Print targets.
virtual void flush() override
size_t write(const uint8_t *buffer, size_t size) override
void remove(Print *target)
bool optimistic
whether you prefer to send too much or too few
virtual size_t write(uint8_t b) override
Printables which go to all clients.
void remove(EthernetClient *target)
void add(EthernetClient *target)
static constexpr int success