buffet: Add command queue and command basic command dispatch mechanism
Added a skeleton CommandQueue class that would hold all the incoming
command instances from local and cloud GCD clients. For now, both
CommandQueue and CommandInstance are simple classes that encapsulate
the command instances received by buffet.
In following CLs, I'll add methods to parse command instance JSON
objects and provide D-Bus serlialization and dispatch to command
handlers (daemons).
BUG=chromium:396713
TEST=USE=buffet P2_TEST_FILTER="buffet::*" FEATURES=test emerge-link platform2
Change-Id: I7ab6bb0778a6320dc75d2a3c9b2a774ea5329054
Reviewed-on: https://chromium-review.googlesource.com/211412
Tested-by: Alex Vakulenko <avakulenko@chromium.org>
Reviewed-by: Christopher Wiley <wiley@chromium.org>
Commit-Queue: Alex Vakulenko <avakulenko@chromium.org>
diff --git a/buffet/commands/command_queue.cc b/buffet/commands/command_queue.cc
new file mode 100644
index 0000000..ca1e7f9
--- /dev/null
+++ b/buffet/commands/command_queue.cc
@@ -0,0 +1,33 @@
+// Copyright 2014 The Chromium OS 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 "buffet/commands/command_queue.h"
+
+namespace buffet {
+
+std::string CommandQueue::Add(std::unique_ptr<const CommandInstance> instance) {
+ std::string id = std::to_string(++next_id_);
+ 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";
+ return id;
+}
+
+std::unique_ptr<const CommandInstance> CommandQueue::Remove(
+ const std::string& id) {
+ std::unique_ptr<const CommandInstance> instance;
+ auto p = map_.find(id);
+ if (p != map_.end()) {
+ instance = std::move(p->second);
+ map_.erase(p);
+ }
+ return instance;
+}
+
+const CommandInstance* CommandQueue::Find(const std::string& id) const {
+ auto p = map_.find(id);
+ return (p != map_.end()) ? p->second.get() : nullptr;
+}
+
+} // namespace buffet