import { computed, observable } from "mobx"; export class ConnectionState { /** * Represents if a client is connected to the sprinklers3 server (eg. via websocket) * Can be null if there is no client involved */ @observable clientToServer: boolean | null = null; /** * Represents if the sprinklers3 server is connected to the broker (eg. via mqtt) * Can be null if there is no broker involved */ @observable serverToBroker: boolean | null = null; /** * Represents if the device is connected to the broker and we can communicate with it (eg. via mqtt) * Can be null if there is no device involved */ @observable brokerToDevice: boolean | null = null; /** * Represents if whoever is trying to access this device has permission to access it. * Is null if there is no concept of access involved. */ @observable hasPermission: boolean | null = null; @computed get noPermission() { return this.hasPermission === false; } @computed get isAvailable(): boolean { if (this.hasPermission === false) { return false; } if (this.brokerToDevice != null) { return true; } if (this.serverToBroker != null) { return this.serverToBroker; } if (this.clientToServer != null) { return this.clientToServer; } return false; } @computed get isDeviceConnected(): boolean | null { if (this.hasPermission === false) { return false; } if (this.serverToBroker === false || this.clientToServer === false) { return null; } if (this.brokerToDevice != null) { return this.brokerToDevice; } return null; } @computed get isServerConnected(): boolean | null { if (this.hasPermission === false) { return false; } if (this.serverToBroker != null) { return this.serverToBroker; } if (this.clientToServer != null) { return this.brokerToDevice; } return null; } }