diff options
author | Jordan Bayles <jophba@chromium.org> | 2021-08-11 15:56:48 -0700 |
---|---|---|
committer | Openscreen LUCI CQ <openscreen-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2021-08-12 17:05:34 +0000 |
commit | 158ca93469cede82d28c0c3d5d5d82c9fa0bfeea (patch) | |
tree | ad29fc63dcc9d78ccd6dad527f4fe49b06acfe0b /cast | |
parent | 65bcc6e2e999734396ed5abef202b1bfe4228e21 (diff) | |
download | openscreen-158ca93469cede82d28c0c3d5d5d82c9fa0bfeea.tar.gz |
[Remoting] Updates to RPCMessenger for downstream usage
This patch contains several changes for allowing the RPCMessenger to
more easily integrate downstream in media/remoting.
Bug: b/184683535
Change-Id: I4bb9d088d25a6b9acb827b072e9765812e1f6986
Reviewed-on: https://chromium-review.googlesource.com/c/openscreen/+/3089653
Commit-Queue: Jordan Bayles <jophba@chromium.org>
Reviewed-by: Ryan Keane <rwkeane@google.com>
Diffstat (limited to 'cast')
-rw-r--r-- | cast/streaming/rpc_messenger.cc | 13 | ||||
-rw-r--r-- | cast/streaming/rpc_messenger.h | 9 |
2 files changed, 19 insertions, 3 deletions
diff --git a/cast/streaming/rpc_messenger.cc b/cast/streaming/rpc_messenger.cc index 3ae6c548..360b5572 100644 --- a/cast/streaming/rpc_messenger.cc +++ b/cast/streaming/rpc_messenger.cc @@ -74,14 +74,17 @@ void RpcMessenger::ProcessMessageFromRemote(const uint8_t* message, << "\""; return; } + ProcessMessageFromRemote(std::move(rpc)); +} - const auto entry = receive_callbacks_.find(rpc->handle()); +void RpcMessenger::ProcessMessageFromRemote(std::unique_ptr<RpcMessage> message) { + const auto entry = receive_callbacks_.find(message->handle()); if (entry == receive_callbacks_.end()) { OSP_VLOG << "Dropping message due to unregistered handle: " - << rpc->handle(); + << message->handle(); return; } - entry->second(std::move(rpc)); + entry->second(std::move(message)); } void RpcMessenger::SendMessageToRemote(const RpcMessage& rpc) { @@ -95,5 +98,9 @@ bool RpcMessenger::IsRegisteredForTesting(RpcMessenger::Handle handle) { return receive_callbacks_.find(handle) != receive_callbacks_.end(); } +WeakPtr<RpcMessenger> RpcMessenger::GetWeakPtr() { + return weak_factory_.GetWeakPtr(); +} + } // namespace cast } // namespace openscreen diff --git a/cast/streaming/rpc_messenger.h b/cast/streaming/rpc_messenger.h index c997a7b9..dd1b1932 100644 --- a/cast/streaming/rpc_messenger.h +++ b/cast/streaming/rpc_messenger.h @@ -12,6 +12,7 @@ #include "cast/streaming/remoting.pb.h" #include "util/flat_map.h" +#include "util/weak_ptr.h" namespace openscreen { namespace cast { @@ -61,6 +62,9 @@ class RpcMessenger { // deserialization by protobuf. void ProcessMessageFromRemote(const uint8_t* message, std::size_t message_len); + // This overload distributes an already-deserialized message to the + // registered component. + void ProcessMessageFromRemote(std::unique_ptr<RpcMessage> message); // Executes the |send_message_cb_| using |rpc|. void SendMessageToRemote(const RpcMessage& rpc); @@ -68,6 +72,9 @@ class RpcMessenger { // Checks if the handle is registered for receiving messages. Test-only. bool IsRegisteredForTesting(Handle handle); + // Weak pointer creator. + WeakPtr<RpcMessenger> GetWeakPtr(); + // Consumers of RPCMessenger may set the send message callback post-hoc // in order to simulate different scenarios. void set_send_message_cb_for_testing(SendMessageCallback cb) { @@ -94,6 +101,8 @@ class RpcMessenger { // Callback that is ran to send a serialized message. SendMessageCallback send_message_cb_; + + WeakPtrFactory<RpcMessenger> weak_factory_{this}; }; } // namespace cast |