|
1 | 1 | import { remote } from 'electron' |
2 | 2 | import { initConnection as initAddressConnection } from 'database/address/ormconfig' |
3 | | -import AddressService from 'services/addresses' |
4 | | -import LockUtils from 'models/lock-utils' |
5 | 3 | import AddressesUsedSubject from 'models/subjects/addresses-used-subject' |
6 | | -import BlockListener from 'services/sync/block-listener' |
7 | 4 | import { NetworkWithID } from 'services/networks' |
8 | 5 | import { register as registerTxStatusListener } from 'listeners/tx-status' |
9 | 6 | import { register as registerAddressListener } from 'listeners/address' |
| 7 | +import IndexerRPC from 'services/indexer/indexer-rpc' |
| 8 | +import Utils from 'services/sync/utils' |
10 | 9 |
|
11 | | -import { initDatabase } from './init-database' |
| 10 | +import { switchNetwork as syncSwitchNetwork } from './sync' |
| 11 | +import { switchNetwork as indexerSwitchNetwork } from './indexer' |
12 | 12 |
|
13 | 13 | // register to listen address updates |
14 | 14 | registerAddressListener() |
15 | 15 |
|
16 | | -const { |
17 | | - nodeService, |
18 | | - addressDbChangedSubject, |
19 | | - addressesUsedSubject, |
20 | | - databaseInitSubject, |
21 | | - walletCreatedSubject, |
22 | | -} = remote.require('./startup/sync-block-task/params') |
| 16 | +const { addressesUsedSubject, databaseInitSubject } = remote.require('./startup/sync-block-task/params') |
23 | 17 |
|
24 | 18 | // pass to task a main process subject |
25 | 19 | AddressesUsedSubject.setSubject(addressesUsedSubject) |
26 | 20 |
|
27 | | -// maybe should call this every time when new address generated |
28 | | -// load all addresses and convert to lockHashes |
29 | | -export const loadAddressesAndConvert = async (): Promise<string[]> => { |
30 | | - const addresses: string[] = (await AddressService.allAddresses()).map(addr => addr.address) |
31 | | - const lockHashes: string[] = await LockUtils.addressesToAllLockHashes(addresses) |
32 | | - return lockHashes |
33 | | -} |
34 | | - |
35 | | -// call this after network switched |
36 | | -let blockListener: BlockListener | undefined |
37 | | -export const switchNetwork = async () => { |
38 | | - // stop all blocks service |
39 | | - if (blockListener) { |
40 | | - await blockListener.stopAndWait() |
| 21 | +export const testIndexer = async (): Promise<boolean> => { |
| 22 | + const indexerRPC = new IndexerRPC() |
| 23 | + try { |
| 24 | + await Utils.retry(3, 100, () => { |
| 25 | + return indexerRPC.getLockHashIndexStates() |
| 26 | + }) |
| 27 | + return true |
| 28 | + } catch { |
| 29 | + return false |
41 | 30 | } |
42 | | - |
43 | | - // disconnect old connection and connect to new database |
44 | | - await initDatabase() |
45 | | - // load lockHashes |
46 | | - const lockHashes: string[] = await loadAddressesAndConvert() |
47 | | - // start sync blocks service |
48 | | - blockListener = new BlockListener(lockHashes, nodeService.tipNumberSubject) |
49 | | - |
50 | | - addressDbChangedSubject.subscribe(async (event: string) => { |
51 | | - // ignore update and remove |
52 | | - if (event === 'AfterInsert') { |
53 | | - const hashes: string[] = await loadAddressesAndConvert() |
54 | | - if (blockListener) { |
55 | | - blockListener.setLockHashes(hashes) |
56 | | - } |
57 | | - } |
58 | | - }) |
59 | | - |
60 | | - const regenerateListener = async () => { |
61 | | - if (blockListener) { |
62 | | - await blockListener.stopAndWait() |
63 | | - } |
64 | | - // wait former queue to be drained |
65 | | - const hashes: string[] = await loadAddressesAndConvert() |
66 | | - blockListener = new BlockListener(hashes, nodeService.tipNumberSubject) |
67 | | - await blockListener.start(true) |
68 | | - } |
69 | | - |
70 | | - walletCreatedSubject.subscribe(async (type: string) => { |
71 | | - if (type === 'import') { |
72 | | - await regenerateListener() |
73 | | - } |
74 | | - }) |
75 | | - |
76 | | - blockListener.start() |
77 | 31 | } |
78 | 32 |
|
79 | 33 | export const run = async () => { |
80 | 34 | await initAddressConnection() |
81 | 35 | databaseInitSubject.subscribe(async (network: NetworkWithID | undefined) => { |
82 | 36 | if (network) { |
83 | | - await switchNetwork() |
| 37 | + const indexerEnable = await testIndexer() |
| 38 | + if (indexerEnable) { |
| 39 | + await indexerSwitchNetwork() |
| 40 | + } else { |
| 41 | + await syncSwitchNetwork() |
| 42 | + } |
84 | 43 | } |
85 | 44 | }) |
86 | 45 | registerTxStatusListener() |
|
0 commit comments