blob: 770ba84e8a96acd7f7ec9087dfcd2ea0d7193228 [file] [log] [blame]
// Copyright 2018 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.
#ifndef PERIDOT_BIN_SESSIONMGR_PUPPET_MASTER_STORY_COMMAND_EXECUTOR_H_
#define PERIDOT_BIN_SESSIONMGR_PUPPET_MASTER_STORY_COMMAND_EXECUTOR_H_
#include <functional>
#include <list>
#include <vector>
#include <fuchsia/modular/cpp/fidl.h>
#include <lib/fit/defer.h>
#include <lib/fit/function.h>
#include <lib/fxl/memory/weak_ptr.h>
namespace modular {
class StoryCommandExecutor {
public:
StoryCommandExecutor();
virtual ~StoryCommandExecutor();
// Executes |commands| on story identified by |story_id| and calls |done| when
// complete. |story_id| is always non-null and refers to an existing Story.
//
// If an error occurs, fuchsia::modular::ExecuteResult.status will be set to
// indicate the type of error, and a helpful error message must also be
// provided in fuchsia::modular::ExecuteResult.error_message.
//
// On success fuchsia::modular::ExecuteResult.status will be set to
// fuchsia::modular::ExecuteStatus.OK.
void ExecuteCommands(
fidl::StringPtr story_id,
std::vector<fuchsia::modular::StoryCommand> commands,
std::function<void(fuchsia::modular::ExecuteResult)> done);
using ListenerCallback = fit::function<void(
const std::vector<fuchsia::modular::StoryCommand>& commands,
fuchsia::modular::ExecuteResult result)>;
using ListenerAutoCancel = fit::deferred_action<std::function<void()>>;
// Calls |listener| whenever StoryCommands are executed with the commands and
// the execution result. Returns a scoped auto-cancel value. The returned
// ListenerAutoCancel must be kept alive as long as the callee wishes to
// receive notifications of StoryCommand execution.
ListenerAutoCancel AddListener(ListenerCallback listener);
private:
virtual void ExecuteCommandsInternal(
fidl::StringPtr story_id,
std::vector<fuchsia::modular::StoryCommand> commands,
std::function<void(fuchsia::modular::ExecuteResult)> done) = 0;
std::list<ListenerCallback> listeners_;
fxl::WeakPtrFactory<StoryCommandExecutor> weak_factory_;
};
} // namespace modular
#endif // PERIDOT_BIN_SESSIONMGR_PUPPET_MASTER_STORY_COMMAND_EXECUTOR_H_