You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

NetworkInfoService.web.js 1.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import EventEmitter from 'events';
  2. import { ONLINE_STATE_CHANGED_EVENT } from './events';
  3. /**
  4. * The network info service implementation for web (Chrome, Firefox and Safari).
  5. */
  6. export default class NetworkInfoService extends EventEmitter {
  7. /**
  8. * Creates new instance...
  9. */
  10. constructor() {
  11. super();
  12. this._onlineStateListener = this._handleOnlineStatusChange.bind(this, /* online */ true);
  13. this._offlineStateListener = this._handleOnlineStatusChange.bind(this, /* offline */ false);
  14. }
  15. /**
  16. * Callback function to track the online state.
  17. *
  18. * @param {boolean} isOnline - Is the browser online or not.
  19. * @private
  20. * @returns {void}
  21. */
  22. _handleOnlineStatusChange(isOnline) {
  23. this.emit(ONLINE_STATE_CHANGED_EVENT, { isOnline });
  24. }
  25. /**
  26. * Checks for support.
  27. *
  28. * @returns {boolean}
  29. */
  30. static isSupported() {
  31. return window.addEventListener && typeof navigator.onLine !== 'undefined';
  32. }
  33. /**
  34. * Starts the service.
  35. *
  36. * @returns {void}
  37. */
  38. start() {
  39. window.addEventListener('online', this._onlineStateListener);
  40. window.addEventListener('offline', this._offlineStateListener);
  41. }
  42. /**
  43. * Stops the service.
  44. *
  45. * @returns {void}
  46. */
  47. stop() {
  48. window.removeEventListener('online', this._onlineStateListener);
  49. window.removeEventListener('offline', this._offlineStateListener);
  50. }
  51. }