pw_rpc: Track ServerWriters in the Server
Register BaseServerWriters when created and unregister them when
Finish() is called. This will allow control packets to close
ServerWriters.
Change-Id: Ic3817b2da4a33f35144351267d7863cbb2bdb4a0
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12361
Commit-Queue: Wyatt Hepler <hepler@google.com>
Reviewed-by: Alexei Frolov <frolv@google.com>
diff --git a/pw_rpc/base_server_writer.cc b/pw_rpc/base_server_writer.cc
index bfe3fe7..4fa1f1f 100644
--- a/pw_rpc/base_server_writer.cc
+++ b/pw_rpc/base_server_writer.cc
@@ -16,10 +16,15 @@
#include "pw_rpc/internal/method.h"
#include "pw_rpc/internal/packet.h"
-#include "pw_rpc/server.h"
+#include "pw_rpc/internal/server.h"
namespace pw::rpc::internal {
+BaseServerWriter::BaseServerWriter(ServerCall& call)
+ : call_(call), state_(kOpen) {
+ call_.server().RegisterWriter(*this);
+}
+
BaseServerWriter& BaseServerWriter::operator=(BaseServerWriter&& other) {
call_ = std::move(other.call_);
response_ = std::move(other.response_);
@@ -34,6 +39,8 @@
return;
}
+ call_.server().RemoveWriter(*this);
+
// TODO(hepler): Send a control packet indicating that the stream has
// terminated.