// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#pragma once

#include <fbl/ref_ptr.h>
#include "src/connectivity/overnet/lib/embedded/udp_nub.h"
#include "src/connectivity/overnet/lib/omdp/omdp.h"

namespace overnet {

class OmdpNub final : public OvernetEmbedded::Actor, private Omdp {
 public:
  OmdpNub(OvernetEmbedded* root, UdpNub* udp_nub);
  ~OmdpNub();
  Status Start() override;

 private:
  void OnNewNode(uint64_t node_id, IpAddr addr) override;
  void Broadcast(Slice slice) override;
  void WaitForInbound();
  void InboundReady(const Status& status);

  HostReactor* const reactor_;
  UdpNub* const udp_nub_;
  Timer* const timer_;
  Socket incoming_;
};

}  // namespace overnet
