blob: 615040ed54473075fbedf06c20b93379ba0161c4 [file] [log] [blame]
// 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.
#ifndef SRC_SYS_ACTIVITY_ACTIVITY_APP_H_
#define SRC_SYS_ACTIVITY_ACTIVITY_APP_H_
#include <fuchsia/ui/activity/control/cpp/fidl.h>
#include <fuchsia/ui/activity/cpp/fidl.h>
#include <lib/zx/channel.h>
#include <zircon/assert.h>
#include <map>
#include <memory>
#include "src/lib/fxl/macros.h"
#include "src/sys/activity/activity_control_connection.h"
#include "src/sys/activity/activity_provider_connection.h"
#include "src/sys/activity/activity_tracker_connection.h"
namespace activity {
class ActivityApp {
public:
ActivityApp(std::unique_ptr<StateMachineDriver> state_machine_driver,
async_dispatcher_t* dispatcher)
: state_machine_driver_(std::move(state_machine_driver)), dispatcher_(dispatcher) {}
// Registers a new Control client and stores a binding created from |request|.
// The binding is automatically cleaned up when the client terminates, or when a channel
// error occurs.
void AddControlBinding(fidl::InterfaceRequest<fuchsia::ui::activity::control::Control> request);
// Registers a new Tracker client and stores a binding created from |request|.
// The binding is automatically cleaned up when the client terminates, or when a channel
// error occurs.
void AddTrackerBinding(fidl::InterfaceRequest<fuchsia::ui::activity::Tracker> request);
// Registers a new Provider client and stores a binding created from |request|.
// The binding is automatically cleaned up when the client terminates, or when a channel
// error occurs.
void AddProviderBinding(fidl::InterfaceRequest<fuchsia::ui::activity::Provider> request);
// Returns a list of weak references to the bindings managed by this instance.
// Exposed for testing.
std::vector<const ActivityControlConnection*> control_bindings() const;
std::vector<const ActivityTrackerConnection*> tracker_bindings() const;
std::vector<const ActivityProviderConnection*> provider_bindings() const;
private:
std::unique_ptr<StateMachineDriver> state_machine_driver_;
async_dispatcher_t* dispatcher_;
std::map<zx::unowned_channel, std::unique_ptr<ActivityControlConnection>> control_bindings_;
std::map<zx::unowned_channel, std::unique_ptr<ActivityTrackerConnection>> tracker_bindings_;
std::map<zx::unowned_channel, std::unique_ptr<ActivityProviderConnection>> provider_bindings_;
FXL_DISALLOW_COPY_ASSIGN_AND_MOVE(ActivityApp);
};
} // namespace activity
#endif // SRC_SYS_ACTIVITY_ACTIVITY_APP_H_