Refactor typescript message handler
This makes it so that, to register a handler on a given topic, you just
need to call a single function, rather than assembling the entire
flatbuffer request message by yourself.
Change-Id: I540f475d9650ab27efe715a05d7586719045aeed
diff --git a/aos/network/www/config_handler.ts b/aos/network/www/config_handler.ts
index 81f61b4..df2d4f8 100644
--- a/aos/network/www/config_handler.ts
+++ b/aos/network/www/config_handler.ts
@@ -2,6 +2,8 @@
import {Connection} from 'org_frc971/aos/network/www/proxy';
import * as flatbuffers_builder from 'org_frc971/external/com_github_google_flatbuffers/ts/builder';
import * as web_proxy from 'org_frc971/aos/network/web_proxy_generated';
+import {Parser, Table} from './reflection'
+import {ByteBuffer} from 'org_frc971/external/com_github_google_flatbuffers/ts/byte-buffer';
import Configuration = configuration.aos.Configuration;
@@ -62,35 +64,27 @@
handleChange() {
const toggles = this.root_div.getElementsByTagName('input');
- const builder =
- new flatbuffers_builder.Builder(512) as unknown as flatbuffers.Builder;
-
- const channels: flatbuffers.Offset[] = [];
for (const toggle of toggles) {
if (!toggle.checked) {
continue;
}
const index = toggle.getAttribute('data-index');
const channel = this.config.channels(Number(index));
- const namefb = builder.createString(channel.name());
- const typefb = builder.createString(channel.type());
- Channel.startChannel(builder);
- Channel.addName(builder, namefb);
- Channel.addType(builder, typefb);
- const channelfb = Channel.endChannel(builder);
- ChannelRequest.startChannelRequest(builder);
- ChannelRequest.addChannel(builder, channelfb);
- ChannelRequest.addMethod(builder, TransferMethod.SUBSAMPLE);
- channels.push(ChannelRequest.endChannelRequest(builder));
+ this.connection.addHandler(
+ channel.name(), channel.type(), (data, time) => {
+ const config = this.connection.getConfig();
+ let schema = null;
+ for (let ii = 0; ii < config.channelsLength(); ++ii) {
+ if (config.channels(ii).type() === channel.type()) {
+ schema = config.channels(ii).schema();
+ }
+ }
+ const parser = new Parser(schema);
+ console.log(
+ parser.toObject(Table.getRootTable(new ByteBuffer(data))));
+ });
}
- const channelsfb =
- SubscriberRequest.createChannelsToTransferVector(builder, channels);
- SubscriberRequest.startSubscriberRequest(builder);
- SubscriberRequest.addChannelsToTransfer(builder, channelsfb);
- const request = SubscriberRequest.endSubscriberRequest(builder);
- builder.finish(request);
- this.connection.sendConnectMessage(builder);
}
toggleConfig() {