• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "components/copresence/handlers/directive_handler.h"
6 
7 #include "base/time/time.h"
8 #include "components/copresence/handlers/audio/audio_directive_handler.h"
9 #include "components/copresence/proto/data.pb.h"
10 
11 namespace copresence {
12 
DirectiveHandler()13 DirectiveHandler::DirectiveHandler() {}
14 
Initialize(const AudioRecorder::DecodeSamplesCallback & decode_cb,const AudioDirectiveHandler::EncodeTokenCallback & encode_cb)15 void DirectiveHandler::Initialize(
16     const AudioRecorder::DecodeSamplesCallback& decode_cb,
17     const AudioDirectiveHandler::EncodeTokenCallback& encode_cb) {
18   audio_handler_.reset(new AudioDirectiveHandler(decode_cb, encode_cb));
19   audio_handler_->Initialize();
20 }
21 
~DirectiveHandler()22 DirectiveHandler::~DirectiveHandler() {
23 }
24 
AddDirective(const Directive & directive)25 void DirectiveHandler::AddDirective(const Directive& directive) {
26   // We only handle Token directives; wifi/ble requests aren't implemented.
27   DCHECK_EQ(directive.instruction_type(), TOKEN);
28 
29   std::string op_id;
30   if (directive.has_published_message_id()) {
31     op_id = directive.published_message_id();
32   } else if (directive.has_subscription_id()) {
33     op_id = directive.subscription_id();
34   } else {
35     NOTREACHED() << "No operation associated with directive!";
36     return;
37   }
38 
39   const TokenInstruction& ti = directive.token_instruction();
40   DCHECK(audio_handler_.get()) << "Clients must call Initialize() before "
41                                << "any other DirectiveHandler methods.";
42   // We currently only support audio.
43   if (ti.medium() == AUDIO_ULTRASOUND_PASSBAND ||
44       ti.medium() == AUDIO_AUDIBLE_DTMF) {
45     audio_handler_->AddInstruction(
46         ti, op_id, base::TimeDelta::FromMilliseconds(directive.ttl_millis()));
47   }
48 }
49 
RemoveDirectives(const std::string & op_id)50 void DirectiveHandler::RemoveDirectives(const std::string& op_id) {
51   DCHECK(audio_handler_.get()) << "Clients must call Initialize() before "
52                                << "any other DirectiveHandler methods.";
53   audio_handler_->RemoveInstructions(op_id);
54 }
55 
CurrentAudibleToken() const56 const std::string& DirectiveHandler::CurrentAudibleToken() const {
57   return audio_handler_->PlayingAudibleToken();
58 }
59 
CurrentInaudibleToken() const60 const std::string& DirectiveHandler::CurrentInaudibleToken() const {
61   return audio_handler_->PlayingInaudibleToken();
62 }
63 
64 }  // namespace copresence
65