WebSocket Improvments #3544
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
import { getBalances, getTokens } from './balancesActions';
|
||||
import { setAddressImage } from './imagesActions';
|
||||
|
||||
import Contracts from '../../contracts';
|
||||
import * as abis from '../../contracts/abi';
|
||||
|
||||
import imagesEthereum from '../../../assets/images/contracts/ethereum-black-64x64.png';
|
||||
@@ -84,15 +85,9 @@ export default class Balances {
|
||||
return Promise.resolve(this._tokenreg);
|
||||
}
|
||||
|
||||
return this._api.parity
|
||||
.registryAddress()
|
||||
.then((registryAddress) => {
|
||||
const registry = this._api.newContract(abis.registry, registryAddress);
|
||||
|
||||
return registry.instance.getAddress.call({}, [this._api.util.sha3('tokenreg'), 'A']);
|
||||
})
|
||||
.then((tokenregAddress) => {
|
||||
const tokenreg = this._api.newContract(abis.tokenreg, tokenregAddress);
|
||||
return Contracts.get().tokenReg
|
||||
.getContract()
|
||||
.then((tokenreg) => {
|
||||
this._tokenreg = tokenreg;
|
||||
this.attachToTokens();
|
||||
|
||||
|
||||
@@ -71,8 +71,8 @@ export default class Status {
|
||||
* @see src/views/Connection/connection.js
|
||||
*/
|
||||
_shouldPing = () => {
|
||||
const { isConnected, isConnecting } = this._apiStatus;
|
||||
return isConnecting || !isConnected;
|
||||
const { isConnected } = this._apiStatus;
|
||||
return !isConnected;
|
||||
}
|
||||
|
||||
_stopPollPing = () => {
|
||||
@@ -102,7 +102,7 @@ export default class Status {
|
||||
}, timeout);
|
||||
};
|
||||
|
||||
fetch('/', { method: 'HEAD' })
|
||||
fetch('/api/ping', { method: 'HEAD' })
|
||||
.then((response) => dispatch(!!response.ok))
|
||||
.catch(() => dispatch(false));
|
||||
}
|
||||
@@ -119,7 +119,7 @@ export default class Status {
|
||||
|
||||
_pollStatus = () => {
|
||||
const nextTimeout = (timeout = 1000) => {
|
||||
setTimeout(this._pollStatus, timeout);
|
||||
setTimeout(() => this._pollStatus(), timeout);
|
||||
};
|
||||
|
||||
const { isConnected, isConnecting, needsToken, secureToken } = this._api;
|
||||
@@ -134,7 +134,8 @@ export default class Status {
|
||||
const gotReconnected = !this._apiStatus.isConnected && apiStatus.isConnected;
|
||||
|
||||
if (gotReconnected) {
|
||||
this._pollLongStatus();
|
||||
this._pollLongStatus(true);
|
||||
this._store.dispatch(statusCollection({ isPingable: true }));
|
||||
}
|
||||
|
||||
if (!isEqual(apiStatus, this._apiStatus)) {
|
||||
@@ -175,13 +176,12 @@ export default class Status {
|
||||
this._store.dispatch(statusCollection(status));
|
||||
this._status = status;
|
||||
}
|
||||
|
||||
nextTimeout();
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('_pollStatus', error);
|
||||
nextTimeout(250);
|
||||
});
|
||||
|
||||
nextTimeout();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -223,7 +223,11 @@ export default class Status {
|
||||
* fetched every 30s just in case, and whenever
|
||||
* the client got reconnected.
|
||||
*/
|
||||
_pollLongStatus = () => {
|
||||
_pollLongStatus = (newConnection = false) => {
|
||||
if (!this._api.isConnected) {
|
||||
return;
|
||||
}
|
||||
|
||||
const nextTimeout = (timeout = 30000) => {
|
||||
if (this._longStatusTimeoutId) {
|
||||
clearTimeout(this._longStatusTimeoutId);
|
||||
@@ -242,7 +246,7 @@ export default class Status {
|
||||
this._api.parity.netChain(),
|
||||
this._api.parity.netPort(),
|
||||
this._api.parity.rpcSettings(),
|
||||
this._api.parity.enode()
|
||||
newConnection ? Promise.resolve(null) : this._api.parity.enode()
|
||||
])
|
||||
.then(([
|
||||
clientVersion, defaultExtraData, netChain, netPort, rpcSettings, enode
|
||||
@@ -255,21 +259,23 @@ export default class Status {
|
||||
netChain,
|
||||
netPort,
|
||||
rpcSettings,
|
||||
enode,
|
||||
isTest
|
||||
};
|
||||
|
||||
if (enode) {
|
||||
longStatus.enode = enode;
|
||||
}
|
||||
|
||||
if (!isEqual(longStatus, this._longStatus)) {
|
||||
this._store.dispatch(statusCollection(longStatus));
|
||||
this._longStatus = longStatus;
|
||||
}
|
||||
|
||||
nextTimeout();
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('_pollLongStatus', error);
|
||||
nextTimeout(250);
|
||||
});
|
||||
|
||||
nextTimeout(newConnection ? 5000 : 30000);
|
||||
}
|
||||
|
||||
_pollLogs = () => {
|
||||
|
||||
Reference in New Issue
Block a user