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()13DirectiveHandler::DirectiveHandler() {} 14 Initialize(const AudioRecorder::DecodeSamplesCallback & decode_cb,const AudioDirectiveHandler::EncodeTokenCallback & encode_cb)15void 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()22DirectiveHandler::~DirectiveHandler() { 23 } 24 AddDirective(const Directive & directive)25void 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)50void 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() const56const std::string& DirectiveHandler::CurrentAudibleToken() const { 57 return audio_handler_->PlayingAudibleToken(); 58 } 59 CurrentInaudibleToken() const60const std::string& DirectiveHandler::CurrentInaudibleToken() const { 61 return audio_handler_->PlayingInaudibleToken(); 62 } 63 64 } // namespace copresence 65