react-native-studia
Version:
75 lines (63 loc) • 2.57 kB
JavaScript
// @flow
import {
State
} from '../Types';
import { NetworkInterface, Broadcast, NetworkModule } from '../StudiaModules';
import { StudiaManager } from '../StudiaManager';
export class Wifi implements NetworkInterface {
_manager: StudiaManager
_networking: ?string
constructor(manager: StudiaManager, networking: string) {
this._manager = manager
this._networking = networking
}
/*check() : Promise<void> {
return this._manager.enable(this._name);
}*/
enable() : Promise<void> {
return this._manager.enable(this._networking)
}
disable() : Promise<void> {
return this._manager.disable(this._networking)
}
getState() : Promise<Broadcast> {
return this._manager.getState(this._networking)
}
onStateChange(listener: (newState: $Keys<typeof State>, status: ?string, canEnable: boolean ) => void, emitCurrentState: boolean = false): Subscription {
const stateListener = ([state, status, canEnable]: [$Keys<typeof State>, ?string, boolean]) => {
listener(state, status, canEnable)
}
const subscription: Subscription = this._manager._eventEmitter.addListener(NetworkModule.WifiStateChangeEvent, stateListener)
const id = this._manager._nextUniqueID()
var wrappedSubscription: Subscription
if (emitCurrentState) {
var cancelled = false
this.getState().then((receiver) => {
if (!cancelled) {
listener(receiver.state, receiver.status, receiver.canEnable)
}
})
wrappedSubscription = {
remove: () => {
if (this._manager._activeSubscriptions[id] != null) {
cancelled = true
delete this._manager._activeSubscriptions[id]
subscription.remove()
}
}
}
} else {
wrappedSubscription = {
remove: () => {
if (this._manager._activeSubscriptions[id] != null) {
delete this._manager._activeSubscriptions[id]
subscription.remove()
}
}
}
}
this._manager._activeSubscriptions[id] = wrappedSubscription
return wrappedSubscription
}
}