Summary: Part of Sonar -> Flipper rename Reviewed By: passy Differential Revision: D9907353 fbshipit-source-id: 01f7bb84da1c27fd68d608151f437a18b6eaaa4e
2.7 KiB
2.7 KiB
id, title, sidebar_label
| id | title | sidebar_label |
|---|---|---|
| create-plugin | Mobile Setup | Mobile Setup |
Implement SonarPlugin
Create a class implementing SonarPlugin.
Android
public class MySonarPlugin implements SonarPlugin {
private SonarConnection mConnection;
@Override
public String getId() {
return "MySonarPlugin";
}
@Override
public void onConnect(SonarConnection connection) throws Exception {
mConnection = connection;
}
@Override
public void onDisconnect() throws Exception {
mConnection = null;
}
}
iOS
@interface MySonarPlugin : NSObject<SonarPlugin>
@end
@implementation MySonarPlugin
- (NSString*)identifier { return @"MySonarPlugin"; }
- (void)didConnect:(SonarConnection*)connection {}
- (void)didDisonnect {}
@end
C++
class MySonarPlugin : public SonarPlugin {
public:
std::string identifier() const override { return "MySonarPlugin"; }
void didConnect(std::shared_ptr<FlipperConnection> conn) override;
void didDisconnect() override;
};
Using SonarConnection
Using the SonarConnection object you can register a receiver of a desktop method call and respond with data.
Android
connection.receive("getData", new SonarReceiver() {
@Override
public void onReceive(SonarObject params, FlipperResponder responder) throws Exception {
responder.success(
new SonarObject.Builder()
.put("data", MyData.get())
.build());
}
});
iOS
@interface MySonarPlugin : NSObject<SonarPlugin>
@end
@implementation MySonarPlugin
- (NSString*)identifier { return @"MySonarPlugin"; }
- (void)didConnect:(SonarConnection*)connection
{
[connection receive:@"getData" withBlock:^(NSDictionary *params, FlipperResponder *responder) {
[responder success:@{
@"data":[MyData get],
}];
}];
}
- (void)didDisonnect {}
@end
C++
void MySonarPlugin::didConnect(std::shared_ptr<FlipperConnection> conn) {
conn->receive("getData", [](const folly::dynamic ¶ms,
std::unique_ptr<FlipperResponder> responder) {
dynamic response = folly::dynamic::object("data", getMyData());
responder->success(response);
});
}
Push data to the desktop
You don't have to wait for the desktop to request data though, you can also push data directly to the desktop.
Android
connection.send("MyMessage",
new SonarObject.Builder()
.put("message", "Hello")
.build()
iOS
[connection send:@"getData" withParams:@{@"message":@"hello"}];
C++
void MySonarPlugin::didConnect(std::shared_ptr<FlipperConnection> conn) {
dynamic message = folly::dynamic::object("message", "hello");
conn->send("getData", message);
}