blob: ce1dfdd32aeca26e6d225a83f865c8740a79a25a [file] [log] [blame]
// Copyright 2017 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.
library fuchsia.modular;
using fuchsia.sys;
// This service is implemented by an application that is meant to be run as an
// Agent.
//
// When an agent application implements the |Lifecycle| interface, it can
// receive a signal for when it should stop. An agent may be stopped for the
// following reasons:
//
// (1) All |AgentController| connections associated with this agent are closed.
//
// (2) The system wants to optimize for resources.
//
// Once the framework delivers a |Lifecycle.Terminate()|, the agent application
// may exit itself, or is killed by framework after a timeout.
[Discoverable] // Created by each agent.
interface Agent {
// Called when some component tries to connect to this agent. |requestor_url|
// is the identifier for the component which called
// |ComponentContext.ConnectToAgent()|. The |services| are provided to that
// component.
1: Connect(string requestor_url, request<fuchsia.sys.ServiceProvider> services);
// Called when some task identified by |task_id| is scheduled to run. The task
// was first posted by this Agent using |AgentContext.ScheduleTask()|. The
// return callback is called by this Agent when all work related to this task
// is completed. Note that the framework may call |Lifecycle.Terminate()|
// before RunTask returns.
//
// TODO(alhaad): The current implementation allows the Agent to run a task
// until its callback returns. If the task takes a long time to finish, the
// framework has no way to signal a request for termination other than to shut
// down the entire Agent instance. Instead, we should cap task length with
// strategies like budgets. Also, the Task should likely have its own
// connection that allows for more signalling.
2: RunTask(string task_id) -> ();
};