buffet: Multiple listeners of add/remove new command.
Replace CommandDispatchInterface with callbacks.
Lists of callbacks in CommandQueue.
BUG=brillo:697
TEST=FEATURE=test emerge-gizmo buffet
Change-Id: I3c164c8c7c2cb098b896aa8d5c9a99d856b05172
Reviewed-on: https://chromium-review.googlesource.com/270350
Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
Tested-by: Vitaly Buka <vitalybuka@chromium.org>
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
diff --git a/buffet/commands/command_queue.cc b/buffet/commands/command_queue.cc
index 62d8c20..614261e 100644
--- a/buffet/commands/command_queue.cc
+++ b/buffet/commands/command_queue.cc
@@ -4,16 +4,23 @@
#include "buffet/commands/command_queue.h"
+#include <base/bind.h>
#include <base/time/time.h>
-#include "buffet/commands/command_dispatch_interface.h"
-
namespace buffet {
namespace {
const int kRemoveCommandDelayMin = 5;
}
+void CommandQueue::AddOnCommandAddedCallback(const Callback& callback) {
+ on_command_added_.push_back(callback);
+}
+
+void CommandQueue::AddOnCommandRemovedCallback(const Callback& callback) {
+ on_command_removed_.push_back(callback);
+}
+
void CommandQueue::Add(std::unique_ptr<CommandInstance> instance) {
std::string id = instance->GetID();
LOG_IF(FATAL, id.empty()) << "Command has no ID";
@@ -21,8 +28,8 @@
auto pair = map_.insert(std::make_pair(id, std::move(instance)));
LOG_IF(FATAL, !pair.second) << "Command with ID '" << id
<< "' is already in the queue";
- if (dispatch_interface_)
- dispatch_interface_->OnCommandAdded(pair.first->second.get());
+ for (const auto& cb : on_command_added_)
+ cb.Run(pair.first->second.get());
Cleanup();
}
@@ -43,8 +50,8 @@
std::unique_ptr<CommandInstance> instance{std::move(p->second)};
instance->SetCommandQueue(nullptr);
map_.erase(p);
- if (dispatch_interface_)
- dispatch_interface_->OnCommandRemoved(instance.get());
+ for (const auto& cb : on_command_removed_)
+ cb.Run(instance.get());
return true;
}