|
| 1 | +import { addPlugin } from "react-native-flipper" |
| 2 | + |
| 3 | +import ConnectionManager from "./connection-manager" |
| 4 | + |
| 5 | +export default class FlipperConnectionManager { |
| 6 | + private baseConnectionManager: ConnectionManager |
| 7 | + // private flipperConnection: Flipper.FlipperConnection |
| 8 | + private flipperConnection: any |
| 9 | + |
| 10 | + private openCallbacks: (() => void)[] = [] |
| 11 | + private closeCallbacks: (() => void)[] = [] |
| 12 | + private messageCallbacks: ((message: string) => void)[] = [] |
| 13 | + |
| 14 | + constructor(path?: string) { |
| 15 | + this.baseConnectionManager = new ConnectionManager(path) |
| 16 | + |
| 17 | + addPlugin({ |
| 18 | + getId() { |
| 19 | + return "flipper-plugin-reactotron" |
| 20 | + }, |
| 21 | + onConnect: this.handleConnect, |
| 22 | + onDisconnect: this.handleDisconnect, |
| 23 | + runInBackground: () => true, |
| 24 | + }) |
| 25 | + } |
| 26 | + |
| 27 | + // handleConnect = (connection: Flipper.FlipperConnection) => { |
| 28 | + handleConnect = (connection: any) => { |
| 29 | + this.flipperConnection = connection |
| 30 | + |
| 31 | + connection.receive("sendReactotronCommand", (data, responder) => { |
| 32 | + this.handleMessage(data) |
| 33 | + responder.success() |
| 34 | + }) |
| 35 | + |
| 36 | + this.openCallbacks.forEach(callback => callback()) |
| 37 | + } |
| 38 | + |
| 39 | + handleMessage = data => { |
| 40 | + this.messageCallbacks.forEach(callback => callback(data)) |
| 41 | + } |
| 42 | + |
| 43 | + handleDisconnect = () => { |
| 44 | + this.flipperConnection = null |
| 45 | + this.closeCallbacks.forEach(callback => callback()) |
| 46 | + } |
| 47 | + |
| 48 | + send(payload: any) { |
| 49 | + const parsedPayload = JSON.parse(payload) |
| 50 | + this.baseConnectionManager.send(parsedPayload) |
| 51 | + this.flipperConnection.send("Command", parsedPayload) |
| 52 | + } |
| 53 | + |
| 54 | + on(event: "open" | "close" | "message", callback: any) { |
| 55 | + this.baseConnectionManager.on(event, callback) |
| 56 | + |
| 57 | + switch (event) { |
| 58 | + case "open": |
| 59 | + if (this.flipperConnection) { |
| 60 | + // If we are already connected, let them know right now. |
| 61 | + callback() |
| 62 | + } |
| 63 | + |
| 64 | + this.openCallbacks.push(callback) |
| 65 | + break |
| 66 | + case "close": |
| 67 | + this.closeCallbacks.push(callback) |
| 68 | + break |
| 69 | + case "message": |
| 70 | + this.messageCallbacks.push(callback) |
| 71 | + break |
| 72 | + } |
| 73 | + } |
| 74 | + |
| 75 | + close() { |
| 76 | + this.baseConnectionManager.close() |
| 77 | + } |
| 78 | +} |
0 commit comments