blob: 05454c9adaf444ac1370b00e6eab455f8292211f [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "platform/impl/event_loop.h"
#include <utility>
#include "platform/api/logging.h"
#include "platform/api/udp_socket.h"
namespace openscreen {
namespace platform {
std::vector<UdpPacket> HandleUdpSocketReadEvents(const Events& events) {
std::vector<UdpPacket> packets(events.udp_readable_events.size());
for (const auto& read_event : events.udp_readable_events) {
ErrorOr<UdpPacket> result = read_event.socket->ReceiveMessage();
if (result) {
packets.emplace_back(result.MoveValue());
} else {
OSP_LOG_ERROR << "ReceiveMessage() on socket failed: "
<< result.error().message();
}
}
return packets;
}
std::vector<UdpPacket> OnePlatformLoopIteration(EventWaiterPtr waiter) {
ErrorOr<Events> events = WaitForEvents(waiter);
if (!events)
return {};
return HandleUdpSocketReadEvents(events.value());
}
} // namespace platform
} // namespace openscreen