Setup sdk for background plugin

Summary:
This diff sets up flipper for running plugins in background. This diff does the following

- Adds a function named `runInBackground` to the interface `FlipperPlugin` to make the plugins opt in to be run in background, default is false
- Changes the javascript side of the flipper to store the messages received by the plugins in background
- Process the stored messages when the plugin in background becomes active
- Currently I have just turned on network plugin to be in background mode.

- Remove the buffering from the network plugin, as it will run in background
- Write a batching layer to batch the messages and send to flipper.

Note: I haven't tested the wilde app yet, but the sample app works. I will remove the "[WIP]" from the title once I have tested it in wilde

Reviewed By: danielbuechele

Differential Revision: D10301403

fbshipit-source-id: 034eebf659a545d6b480a4ac1b73b0aa4b2f9797
This commit is contained in:
Pritesh Nandgaonkar
2018-10-11 15:19:19 -07:00
committed by Facebook Github Bot
parent 992ad68517
commit 5bbfa58909
11 changed files with 104 additions and 5 deletions

View File

@@ -79,6 +79,19 @@ void FlipperClient::removePlugin(std::shared_ptr<FlipperPlugin> plugin) {
});
}
void FlipperClient::startBackgroundPlugins() {
std::cout << "Activating Background Plugins..." << std::endl;
for (std::map<std::string, std::shared_ptr<FlipperPlugin>>::iterator it=plugins_.begin(); it!=plugins_.end(); ++it) {
std::cout << it->first << std::endl;
if (it->second.get()->runInBackground()) {
auto& conn = connections_[it->first];
conn = std::make_shared<FlipperConnectionImpl>(socket_.get(),it->first);
it->second.get()->didConnect(conn);
}
}
}
std::shared_ptr<FlipperPlugin> FlipperClient::getPlugin(
const std::string& identifier) {
std::lock_guard<std::mutex> lock(mutex_);
@@ -113,6 +126,7 @@ void FlipperClient::onConnected() {
std::lock_guard<std::mutex> lock(mutex_);
connected_ = true;
startBackgroundPlugins();
}
void FlipperClient::onDisconnected() {
@@ -161,7 +175,9 @@ void FlipperClient::onMessageReceived(const dynamic& message) {
auto& conn = connections_[plugin->identifier()];
conn = std::make_shared<FlipperConnectionImpl>(
socket_.get(), plugin->identifier());
plugin->didConnect(conn);
if (!plugin.get()->runInBackground()) {
plugin->didConnect(conn);
}
return;
}
@@ -173,7 +189,9 @@ void FlipperClient::onMessageReceived(const dynamic& message) {
method.getString());
}
const auto plugin = plugins_.at(identifier);
disconnect(plugin);
if (!plugin.get()->runInBackground()) {
disconnect(plugin);
}
return;
}