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.