aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordan Bayles <jophba@chromium.org>2021-08-11 15:56:48 -0700
committerOpenscreen LUCI CQ <openscreen-scoped@luci-project-accounts.iam.gserviceaccount.com>2021-08-12 17:05:34 +0000
commit158ca93469cede82d28c0c3d5d5d82c9fa0bfeea (patch)
treead29fc63dcc9d78ccd6dad527f4fe49b06acfe0b
parent65bcc6e2e999734396ed5abef202b1bfe4228e21 (diff)
downloadopenscreen-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>
-rw-r--r--cast/streaming/rpc_messenger.cc13
-rw-r--r--cast/streaming/rpc_messenger.h9
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