directive_handler.cc 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#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 11namespace copresence { 12 13DirectiveHandler::DirectiveHandler() {} 14 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 22DirectiveHandler::~DirectiveHandler() { 23} 24 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 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 56const std::string& DirectiveHandler::CurrentAudibleToken() const { 57 return audio_handler_->PlayingAudibleToken(); 58} 59 60const std::string& DirectiveHandler::CurrentInaudibleToken() const { 61 return audio_handler_->PlayingInaudibleToken(); 62} 63 64} // namespace copresence 65