1
0

service.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. const transport = require('../../transport/ble-core.js')
  2. const manualRtuService = require('../manual-rtu/service.js')
  3. const themeService = require('../../store/theme-store.js')
  4. const {
  5. DEFAULT_DEVICE_FILTER,
  6. getHomePageState
  7. } = require('./view-model.js')
  8. let initScheduled = false
  9. function deferStartupWork(task) {
  10. if (typeof task !== 'function') return
  11. if (typeof setTimeout === 'function') {
  12. setTimeout(task, 120)
  13. return
  14. }
  15. task()
  16. }
  17. function init() {
  18. if (initScheduled) return
  19. initScheduled = true
  20. deferStartupWork(() => {
  21. try {
  22. themeService.init()
  23. } catch (error) {}
  24. })
  25. }
  26. function getState(deviceFilterMode = DEFAULT_DEVICE_FILTER) {
  27. return getHomePageState(
  28. transport.getState(),
  29. deviceFilterMode,
  30. themeService.getState(),
  31. manualRtuService.getState()
  32. )
  33. }
  34. function subscribeState(getDeviceFilterMode, subscriber) {
  35. if (typeof subscriber !== 'function') return () => {}
  36. const getFilterMode = typeof getDeviceFilterMode === 'function'
  37. ? getDeviceFilterMode
  38. : () => DEFAULT_DEVICE_FILTER
  39. const emit = () => subscriber(getState(getFilterMode()))
  40. const unsubscribers = [
  41. transport.subscribe(emit),
  42. manualRtuService.subscribe(emit),
  43. themeService.subscribe(emit)
  44. ]
  45. return () => {
  46. unsubscribers.forEach((unsubscribe) => {
  47. if (typeof unsubscribe === 'function') unsubscribe()
  48. })
  49. }
  50. }
  51. function toggleScan(isDiscovering) {
  52. return isDiscovering ? transport.stopScan() : transport.startScan()
  53. }
  54. module.exports = {
  55. DEFAULT_DEVICE_FILTER,
  56. clearDevices: transport.clearDevices,
  57. clearInput: transport.clearInput,
  58. clearLogs: transport.clearLogs,
  59. closeProtocolMultipleDialog: manualRtuService.closeProtocolMultipleDialog,
  60. connectDeviceById: transport.connectDeviceById,
  61. disconnectDevice: transport.disconnectDevice,
  62. getState,
  63. init,
  64. openProtocolMultipleDialog: manualRtuService.openProtocolMultipleDialog,
  65. sendGeneratedFrame: manualRtuService.sendGeneratedFrame,
  66. sendHexFrame: transport.sendHexFrame,
  67. setCommandIndex: manualRtuService.setCommandIndex,
  68. setProtocolInput: manualRtuService.setProtocolInput,
  69. setProtocolMultipleQuantity: manualRtuService.setProtocolMultipleQuantity,
  70. setProtocolMultipleTextLength: manualRtuService.setProtocolMultipleTextLength,
  71. setProtocolMultipleType: manualRtuService.setProtocolMultipleType,
  72. setProtocolMultipleValue: manualRtuService.setProtocolMultipleValue,
  73. setSendHex: transport.setSendHex,
  74. subscribeState,
  75. toggleScan,
  76. validateProtocolMultipleValue: manualRtuService.validateProtocolMultipleValue
  77. }