Add --rate flag to aos_send

Sometimes it's useful to be able to send a message periodically.

Change-Id: I6f498ddba8183a03659e09ce4382bdb3e6a1d0f0
Signed-off-by: James Kuszmaul <jabukuszmaul+collab@gmail.com>
diff --git a/aos/aos_send.cc b/aos/aos_send.cc
index ffc7957..adfd780 100644
--- a/aos/aos_send.cc
+++ b/aos/aos_send.cc
@@ -9,6 +9,8 @@
 #include "gflags/gflags.h"
 #include "glog/logging.h"
 
+DEFINE_double(rate, -1, "Rate at which to send the message (-1 to send once).");
+
 int main(int argc, char **argv) {
   gflags::SetUsageMessage(
       "Sends messages on arbitrary channels.\n"
@@ -44,7 +46,19 @@
   fbb.ForceDefaults(true);
   fbb.Finish(aos::JsonToFlatbuffer(std::string_view(argv[1]), channel->schema(),
                                    &fbb));
-  sender->CheckOk(sender->Send(fbb.GetSize()));
+
+  if (FLAGS_rate < 0) {
+    sender->CheckOk(sender->Send(fbb.GetSize()));
+  } else {
+    cli_info.event_loop
+        ->AddTimer([&fbb, &sender]() {
+          sender->CheckOk(sender->Send(fbb.GetBufferPointer(), fbb.GetSize()));
+        })
+        ->Setup(cli_info.event_loop->monotonic_now(),
+                std::chrono::duration_cast<std::chrono::nanoseconds>(
+                    std::chrono::duration<double>(1.0 / FLAGS_rate)));
+    cli_info.event_loop->Run();
+  }
 
   return 0;
 }