| OLD | NEW |
| (Empty) |
| 1 // Copyright 2016 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 "media/remoting/rpc/rpc_broker.h" | |
| 6 | |
| 7 #include <utility> | |
| 8 | |
| 9 #include "base/logging.h" | |
| 10 #include "media/base/bind_to_current_loop.h" | |
| 11 | |
| 12 namespace media { | |
| 13 namespace remoting { | |
| 14 | |
| 15 namespace { | |
| 16 | |
| 17 std::ostream& operator<<(std::ostream& out, const pb::RpcMessage& message) { | |
| 18 out << "handle=" << message.handle() << ", proc=" << message.proc(); | |
| 19 switch (message.rpc_oneof_case()) { | |
| 20 case pb::RpcMessage::kIntegerValue: | |
| 21 out << ", integer_value=" << message.integer_value(); | |
| 22 break; | |
| 23 case pb::RpcMessage::kInteger64Value: | |
| 24 out << ", integer64_value=" << message.integer64_value(); | |
| 25 break; | |
| 26 case pb::RpcMessage::kDoubleValue: | |
| 27 out << ", double_value=" << message.double_value(); | |
| 28 break; | |
| 29 case pb::RpcMessage::kBooleanValue: | |
| 30 out << ", boolean_value=" << message.boolean_value(); | |
| 31 break; | |
| 32 case pb::RpcMessage::kStringValue: | |
| 33 out << ", string_value=" << message.string_value(); | |
| 34 break; | |
| 35 default: | |
| 36 out << ", rpc_oneof=" << message.rpc_oneof_case(); | |
| 37 break; | |
| 38 } | |
| 39 return out; | |
| 40 } | |
| 41 | |
| 42 } // namespace | |
| 43 | |
| 44 RpcBroker::RpcBroker(const SendMessageCallback& send_message_cb) | |
| 45 : next_handle_(kReceiverHandle + 1), | |
| 46 send_message_cb_(send_message_cb), | |
| 47 weak_factory_(this) {} | |
| 48 | |
| 49 RpcBroker::~RpcBroker() { | |
| 50 DCHECK(thread_checker_.CalledOnValidThread()); | |
| 51 receive_callbacks_.clear(); | |
| 52 } | |
| 53 | |
| 54 int RpcBroker::GetUniqueHandle() { | |
| 55 DCHECK(thread_checker_.CalledOnValidThread()); | |
| 56 return next_handle_++; | |
| 57 } | |
| 58 | |
| 59 void RpcBroker::RegisterMessageReceiverCallback( | |
| 60 int handle, | |
| 61 const ReceiveMessageCallback& callback) { | |
| 62 VLOG(2) << __func__ << "handle=" << handle; | |
| 63 DCHECK(thread_checker_.CalledOnValidThread()); | |
| 64 DCHECK(receive_callbacks_.find(handle) == receive_callbacks_.end()); | |
| 65 receive_callbacks_[handle] = callback; | |
| 66 } | |
| 67 | |
| 68 void RpcBroker::UnregisterMessageReceiverCallback(int handle) { | |
| 69 VLOG(2) << __func__ << " handle=" << handle; | |
| 70 DCHECK(thread_checker_.CalledOnValidThread()); | |
| 71 receive_callbacks_.erase(handle); | |
| 72 } | |
| 73 | |
| 74 void RpcBroker::ProcessMessageFromRemote( | |
| 75 std::unique_ptr<pb::RpcMessage> message) { | |
| 76 DCHECK(message); | |
| 77 DCHECK(thread_checker_.CalledOnValidThread()); | |
| 78 VLOG(3) << __func__ << ": " << *message; | |
| 79 const auto entry = receive_callbacks_.find(message->handle()); | |
| 80 if (entry == receive_callbacks_.end()) { | |
| 81 LOG(ERROR) << "unregistered handle: " << message->handle(); | |
| 82 return; | |
| 83 } | |
| 84 entry->second.Run(std::move(message)); | |
| 85 } | |
| 86 | |
| 87 void RpcBroker::SendMessageToRemote(std::unique_ptr<pb::RpcMessage> message) { | |
| 88 DCHECK(thread_checker_.CalledOnValidThread()); | |
| 89 DCHECK(message); | |
| 90 VLOG(3) << __func__ << ": " << *message; | |
| 91 std::unique_ptr<std::vector<uint8_t>> serialized_message( | |
| 92 new std::vector<uint8_t>(message->ByteSize())); | |
| 93 CHECK(message->SerializeToArray(serialized_message->data(), | |
| 94 serialized_message->size())); | |
| 95 send_message_cb_.Run(std::move(serialized_message)); | |
| 96 } | |
| 97 | |
| 98 base::WeakPtr<RpcBroker> RpcBroker::GetWeakPtr() { | |
| 99 return weak_factory_.GetWeakPtr(); | |
| 100 } | |
| 101 | |
| 102 void RpcBroker::SetMessageCallbackForTesting( | |
| 103 const SendMessageCallback& send_message_cb) { | |
| 104 DCHECK(thread_checker_.CalledOnValidThread()); | |
| 105 send_message_cb_ = send_message_cb; | |
| 106 } | |
| 107 | |
| 108 } // namespace remoting | |
| 109 } // namespace media | |
| OLD | NEW |