// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "blimp/net/blimp_message_multiplexer.h" #include "base/logging.h" #include "blimp/common/proto/blimp_message.pb.h" #include "blimp/net/blimp_message_processor.h" namespace blimp { namespace { class MultiplexedSender : public BlimpMessageProcessor { public: MultiplexedSender(base::WeakPtr output_processor, BlimpMessage::Type type); ~MultiplexedSender() override; // BlimpMessageProcessor implementation. // |message.type|, if set, must match the sender's type. void ProcessMessage(scoped_ptr message, const net::CompletionCallback& callback) override; private: base::WeakPtr output_processor_; BlimpMessage::Type type_; DISALLOW_COPY_AND_ASSIGN(MultiplexedSender); }; MultiplexedSender::MultiplexedSender( base::WeakPtr output_processor, BlimpMessage::Type type) : output_processor_(output_processor), type_(type) {} MultiplexedSender::~MultiplexedSender() {} void MultiplexedSender::ProcessMessage( scoped_ptr message, const net::CompletionCallback& callback) { if (message->has_type()) { DCHECK_EQ(type_, message->type()); } else { message->set_type(type_); } output_processor_->ProcessMessage(std::move(message), callback); } } // namespace BlimpMessageMultiplexer::BlimpMessageMultiplexer( BlimpMessageProcessor* output_processor) : output_weak_factory_(output_processor) {} BlimpMessageMultiplexer::~BlimpMessageMultiplexer() {} scoped_ptr BlimpMessageMultiplexer::CreateSenderForType( BlimpMessage::Type type) { return make_scoped_ptr( new MultiplexedSender(output_weak_factory_.GetWeakPtr(), type)); } } // namespace blimp