directive_handler.h revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef COMPONENTS_COPRESENCE_HANDLERS_DIRECTIVE_HANDLER_H_
6#define COMPONENTS_COPRESENCE_HANDLERS_DIRECTIVE_HANDLER_H_
7
8#include <string>
9
10#include "base/callback.h"
11#include "base/macros.h"
12#include "base/memory/scoped_ptr.h"
13#include "components/copresence/handlers/audio/audio_directive_handler.h"
14#include "components/copresence/mediums/audio/audio_recorder.h"
15
16namespace copresence {
17
18class Directive;
19
20// The directive handler manages transmit and receive directives
21// given to it by the client.
22class DirectiveHandler {
23 public:
24  DirectiveHandler();
25  virtual ~DirectiveHandler();
26
27  // Initialize the |audio_handler_| with the appropriate callbacks.
28  // This function must be called before any others.
29  // TODO(ckehoe): Instead of this, use a static Create() method
30  //               and make the constructor private.
31  virtual void Initialize(
32      const AudioRecorder::DecodeSamplesCallback& decode_cb,
33      const AudioDirectiveHandler::EncodeTokenCallback& encode_cb);
34
35  // Adds a directive to handle.
36  virtual void AddDirective(const copresence::Directive& directive);
37  // Removes any directives associated with the given operation id.
38  virtual void RemoveDirectives(const std::string& op_id);
39
40  const std::string& CurrentAudibleToken() const;
41  const std::string& CurrentInaudibleToken() const;
42
43 private:
44  scoped_ptr<AudioDirectiveHandler> audio_handler_;
45
46  DISALLOW_COPY_AND_ASSIGN(DirectiveHandler);
47};
48
49}  // namespace copresence
50
51#endif  // COMPONENTS_COPRESENCE_HANDLERS_DIRECTIVE_HANDLER_H_
52