Add backpressure to web_proxy
Implement things such that the client will send back what it has
currently processed on a given channel. The server will then avoid
sending more than 10000 messages ahead of that point.
Also, fix up some memory management to ensure that data channels
actually get closed/destroyed at the end of a browser session.
Change-Id: Id1795d7496f410332407624a559d6a16a1698702
Signed-off-by: James Kuszmaul <jabukuszmaul@gmail.com>
diff --git a/aos/network/www/proxy.ts b/aos/network/www/proxy.ts
index 3da817c..c52f495 100644
--- a/aos/network/www/proxy.ts
+++ b/aos/network/www/proxy.ts
@@ -15,6 +15,7 @@
import SubscriberRequest = web_proxy.aos.web_proxy.SubscriberRequest;
import ChannelRequestFb = web_proxy.aos.web_proxy.ChannelRequest;
import TransferMethod = web_proxy.aos.web_proxy.TransferMethod;
+import ChannelState = web_proxy.aos.web_proxy.ChannelState;
// There is one handler for each DataChannel, it maintains the state of
// multi-part messages and delegates to a callback when the message is fully
@@ -34,6 +35,16 @@
const messageHeader = MessageHeader.getRootAsMessageHeader(
fbBuffer as unknown as flatbuffers.ByteBuffer);
const time = messageHeader.monotonicSentTime().toFloat64() * 1e-9;
+
+ const stateBuilder = new Builder(512) as unknown as flatbuffers.Builder;
+ ChannelState.startChannelState(stateBuilder);
+ ChannelState.addQueueIndex(stateBuilder, messageHeader.queueIndex());
+ ChannelState.addPacketIndex(stateBuilder, messageHeader.packetIndex());
+ const state = ChannelState.endChannelState(stateBuilder);
+ stateBuilder.finish(state);
+ const stateArray = stateBuilder.asUint8Array();
+ this.channel.send(stateArray);
+
// Short circuit if only one packet
if (messageHeader.packetCount() === 1) {
this.handlerFunc(messageHeader.dataArray(), time);