59 lines
1.5 KiB
JavaScript
59 lines
1.5 KiB
JavaScript
|
import EventEmitter from 'events';
|
||
|
|
||
|
import { ONLINE_STATE_CHANGED_EVENT } from './events';
|
||
|
|
||
|
/**
|
||
|
* The network info service implementation for web (Chrome, Firefox and Safari).
|
||
|
*/
|
||
|
export default class NetworkInfoService extends EventEmitter {
|
||
|
|
||
|
/**
|
||
|
* Creates new instance...
|
||
|
*/
|
||
|
constructor() {
|
||
|
super();
|
||
|
this._onlineStateListener = this._handleOnlineStatusChange.bind(this, /* online */ true);
|
||
|
this._offlineStateListener = this._handleOnlineStatusChange.bind(this, /* offline */ false);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Callback function to track the online state.
|
||
|
*
|
||
|
* @param {boolean} isOnline - Is the browser online or not.
|
||
|
* @private
|
||
|
* @returns {void}
|
||
|
*/
|
||
|
_handleOnlineStatusChange(isOnline) {
|
||
|
this.emit(ONLINE_STATE_CHANGED_EVENT, { isOnline });
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Checks for support.
|
||
|
*
|
||
|
* @returns {boolean}
|
||
|
*/
|
||
|
static isSupported() {
|
||
|
return window.addEventListener && typeof navigator.onLine !== 'undefined';
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Starts the service.
|
||
|
*
|
||
|
* @returns {void}
|
||
|
*/
|
||
|
start() {
|
||
|
window.addEventListener('online', this._onlineStateListener);
|
||
|
window.addEventListener('offline', this._offlineStateListener);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Stops the service.
|
||
|
*
|
||
|
* @returns {void}
|
||
|
*/
|
||
|
stop() {
|
||
|
window.removeEventListener('online', this._onlineStateListener);
|
||
|
window.removeEventListener('offline', this._offlineStateListener);
|
||
|
}
|
||
|
}
|