| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- const transport = require('../../transport/ble-core.js')
- const manualRtuService = require('../manual-rtu/service.js')
- const themeService = require('../../store/theme-store.js')
- const {
- DEFAULT_DEVICE_FILTER,
- getHomePageState
- } = require('./view-model.js')
- let syncService = null
- let initScheduled = false
- const syncSubscriptionHooks = []
- function deferStartupWork(task) {
- if (typeof task !== 'function') return
- if (typeof setTimeout === 'function') {
- setTimeout(task, 120)
- return
- }
- task()
- }
- function getSyncService() {
- if (!syncService) {
- syncService = require('../motor-control/sync-service.js')
- syncSubscriptionHooks.slice().forEach((hook) => {
- hook(syncService)
- })
- }
- return syncService
- }
- function getSyncState() {
- return syncService ? syncService.getState() : {
- isSyncing: false
- }
- }
- function init() {
- if (initScheduled) return
- initScheduled = true
- deferStartupWork(() => {
- try {
- themeService.init()
- } catch (error) {}
- })
- }
- function getState(deviceFilterMode = DEFAULT_DEVICE_FILTER) {
- return getHomePageState(
- transport.getState(),
- deviceFilterMode,
- getSyncState(),
- themeService.getState(),
- manualRtuService.getState()
- )
- }
- function subscribeState(getDeviceFilterMode, subscriber) {
- if (typeof subscriber !== 'function') return () => {}
- const getFilterMode = typeof getDeviceFilterMode === 'function'
- ? getDeviceFilterMode
- : () => DEFAULT_DEVICE_FILTER
- const emit = () => subscriber(getState(getFilterMode()))
- let syncUnsubscribe = null
- const syncHook = (service) => {
- if (!syncUnsubscribe) {
- syncUnsubscribe = service.subscribe(emit)
- }
- }
- syncSubscriptionHooks.push(syncHook)
- if (syncService) syncHook(syncService)
- const unsubscribers = [
- transport.subscribe(emit),
- manualRtuService.subscribe(emit),
- themeService.subscribe(emit)
- ]
- return () => {
- unsubscribers.forEach((unsubscribe) => {
- if (typeof unsubscribe === 'function') unsubscribe()
- })
- if (typeof syncUnsubscribe === 'function') syncUnsubscribe()
- const index = syncSubscriptionHooks.indexOf(syncHook)
- if (index >= 0) syncSubscriptionHooks.splice(index, 1)
- }
- }
- function toggleScan(isDiscovering) {
- return isDiscovering ? transport.stopScan() : transport.startScan()
- }
- module.exports = {
- DEFAULT_DEVICE_FILTER,
- clearDevices: transport.clearDevices,
- clearInput: transport.clearInput,
- clearLogs: transport.clearLogs,
- closeProtocolMultipleDialog: manualRtuService.closeProtocolMultipleDialog,
- connectDeviceById: transport.connectDeviceById,
- disconnectDevice: transport.disconnectDevice,
- getState,
- init,
- openProtocolMultipleDialog: manualRtuService.openProtocolMultipleDialog,
- sendGeneratedFrame: manualRtuService.sendGeneratedFrame,
- sendHexFrame: transport.sendHexFrame,
- setCommandIndex: manualRtuService.setCommandIndex,
- setProtocolInput: manualRtuService.setProtocolInput,
- setProtocolMultipleQuantity: manualRtuService.setProtocolMultipleQuantity,
- setProtocolMultipleTextLength: manualRtuService.setProtocolMultipleTextLength,
- setProtocolMultipleType: manualRtuService.setProtocolMultipleType,
- setProtocolMultipleValue: manualRtuService.setProtocolMultipleValue,
- setSendHex: transport.setSendHex,
- subscribeState,
- syncRegisters: () => getSyncService().syncAllRegisters(),
- toggleScan,
- validateProtocolMultipleValue: manualRtuService.validateProtocolMultipleValue
- }
|