Show communcating with devices page

Summary:
This page got lost in the reorganisation. Adding it back.
There's still work to be done on the content and organisation of these docs.

Reviewed By: passy

Differential Revision: D15184349

fbshipit-source-id: 76256ba53189579bec363903dc4068a421cafc98
This commit is contained in:
John Knox
2019-05-02 12:34:15 -07:00
committed by Facebook Github Bot
parent d022cd0e42
commit a276af9c1f
2 changed files with 7 additions and 11 deletions

View File

@@ -0,0 +1,42 @@
---
id: communicating
title: Device Communication
sidebar_label: Device Communication
---
To start communicating with a client your plugin must implement the init function. Once this function has been called the active client can also be accessed via `this.client`. This `id` of the plugin in JavaScript must match the native plugin `id` to allow for them to communicate.
```javascript
class extends FlipperPlugin {
static title = "MyPlugin";
static id = "MyPlugin";
init() {
// Setup subscriptions etc using this.client
}
}
```
There are three main ways your desktop plugin can communicate with connected devices.
## Remote method calls
With remote method calls your plugin can call a method on the attached client. This is useful for querying information from the client that your plugin wants to display. The first parameter is the name of the client API and the second is the specific method on that API. Optionally a JSON object can be passed as an argument to the client.
```javascript
this.client.call('methodName', data).then(res => {
// res contains client response
});
```
This function returns a promise so that you can await a potential response from the client. This also gives you the opportunity to handle or report errors encountered by the client using `Promise.catch`.
## Subscriptions
A client is not only able to respond to method calls but also push data directly to the Flipper desktop app. With the subscribe API your plugin can subscribe to data pushed from the client. Pass the name of the method and the API it is part of as well as a callback function to start a subscription. Any time the client sends a push matching this method the callback will be called with any attached data as a javascript object.
```javascript
this.client.subscribe('methodName', data => {
// data contains any payload sent by the client
});
```