| Index: blimp/common/net/message_dispatcher.cc
|
| diff --git a/blimp/common/net/message_dispatcher.cc b/blimp/common/net/message_dispatcher.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c901c61f3494e9d4a00021d694d89eeef4e75e17
|
| --- /dev/null
|
| +++ b/blimp/common/net/message_dispatcher.cc
|
| @@ -0,0 +1,56 @@
|
| +// 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/common/net/message_dispatcher.h"
|
| +
|
| +#include <string>
|
| +
|
| +#include "base/strings/stringprintf.h"
|
| +
|
| +namespace blimp {
|
| +namespace {
|
| +
|
| +std::string BlimpMessageToDebugString(const BlimpMessage& message) {
|
| + return base::StringPrintf("<message type=%d, tab=%d>", message.type(),
|
| + message.target_tab_id());
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +MessageDispatcher::MessageDispatcher() {}
|
| +
|
| +MessageDispatcher::~MessageDispatcher() {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| +}
|
| +
|
| +void MessageDispatcher::AddHandler(BlimpMessage::Type type, Handler* handler) {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| + if (feature_handler_map_.find(type) == feature_handler_map_.end()) {
|
| + feature_handler_map_.insert(std::make_pair(type, handler));
|
| + } else {
|
| + LOG(ERROR) << "Handler already registered for type " << type << ".";
|
| + }
|
| +}
|
| +
|
| +void MessageDispatcher::Dispatch(const BlimpMessage& message) const {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| +
|
| + auto handler_iter = feature_handler_map_.find(message.type());
|
| + if (handler_iter == feature_handler_map_.end()) {
|
| + LOG(ERROR) << "No registered handler for "
|
| + << BlimpMessageToDebugString(message) << ".";
|
| + return;
|
| + }
|
| +
|
| + DCHECK(handler_iter->second);
|
| + if (!handler_iter->second->Validate(message)) {
|
| + LOG(WARNING) << BlimpMessageToDebugString(message)
|
| + << " rejected by handler.";
|
| + return;
|
| + }
|
| +
|
| + handler_iter->second->OnMessage(message);
|
| +}
|
| +
|
| +} // namespace blimp
|
|
|