Keep the app connected to the best node.
- Added a recurrent method that verifies every minute that the app is connected to the best node, and if that is not the case then it requests a reconnection.
This commit is contained in:
parent
855f47e793
commit
e2637ddfa4
1 changed files with 44 additions and 12 deletions
|
@ -58,6 +58,12 @@ abstract class ConnectedActivity : AppCompatActivity(), ServiceConnection {
|
||||||
companion object {
|
companion object {
|
||||||
private const val TAG = "ConnectedActivity"
|
private const val TAG = "ConnectedActivity"
|
||||||
|
|
||||||
|
// Delay between best node connection verifications
|
||||||
|
private const val NODE_CHECK_DELAY = 60000L // 60 seconds
|
||||||
|
|
||||||
|
// Worst acceptable position of the node the app is currently connected to
|
||||||
|
private const val BEST_NODE_THRESHOLD = 1
|
||||||
|
|
||||||
private const val RESPONSE_GET_FULL_ACCOUNTS = 1
|
private const val RESPONSE_GET_FULL_ACCOUNTS = 1
|
||||||
private const val RESPONSE_GET_ACCOUNTS = 2
|
private const val RESPONSE_GET_ACCOUNTS = 2
|
||||||
private const val RESPONSE_GET_ACCOUNT_BALANCES = 3
|
private const val RESPONSE_GET_ACCOUNT_BALANCES = 3
|
||||||
|
@ -399,6 +405,31 @@ abstract class ConnectedActivity : AppCompatActivity(), ServiceConnection {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Task used to verify that the app is currently connected to one of the best nodes,
|
||||||
|
* and ask for a reconnection if it is not the case.
|
||||||
|
*/
|
||||||
|
private val verifyConnectionToSuitableNodeTask = object : Runnable {
|
||||||
|
override fun run() {
|
||||||
|
Log.d(TAG, "Verifying app is connected to one of the best nodes")
|
||||||
|
mNetworkService?.nodes?.let { nodes ->
|
||||||
|
for ((counter, node) in nodes.withIndex()) {
|
||||||
|
if (counter >= BEST_NODE_THRESHOLD) {
|
||||||
|
// Forcing reconnection to a better node
|
||||||
|
mNetworkService?.reconnectNode()
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if (node.isConnected) {
|
||||||
|
// App is connected to one of the best nodes
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mHandler.postDelayed(this, NODE_CHECK_DELAY)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Task used to obtain the missing UserAccounts from Graphenej's NetworkService.
|
* Task used to obtain the missing UserAccounts from Graphenej's NetworkService.
|
||||||
*/
|
*/
|
||||||
|
@ -477,6 +508,19 @@ abstract class ConnectedActivity : AppCompatActivity(), ServiceConnection {
|
||||||
|
|
||||||
override fun onServiceDisconnected(name: ComponentName?) { }
|
override fun onServiceDisconnected(name: ComponentName?) { }
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
|
||||||
|
val intent = Intent(this, NetworkService::class.java)
|
||||||
|
if (bindService(intent, this, Context.BIND_AUTO_CREATE)) {
|
||||||
|
mShouldUnbindNetwork = true
|
||||||
|
} else {
|
||||||
|
Log.e(TAG, "Binding to the network service failed.")
|
||||||
|
}
|
||||||
|
mHandler.postDelayed(mCheckMissingPaymentsTask, Constants.MISSING_PAYMENT_CHECK_PERIOD)
|
||||||
|
mHandler.postDelayed(verifyConnectionToSuitableNodeTask, NODE_CHECK_DELAY)
|
||||||
|
}
|
||||||
|
|
||||||
override fun onPause() {
|
override fun onPause() {
|
||||||
super.onPause()
|
super.onPause()
|
||||||
mNetworkService?.nodeLatencyVerifier?.nodeList?.let { nodes ->
|
mNetworkService?.nodeLatencyVerifier?.nodeList?.let { nodes ->
|
||||||
|
@ -495,18 +539,6 @@ abstract class ConnectedActivity : AppCompatActivity(), ServiceConnection {
|
||||||
mHandler.removeCallbacks(mRequestBlockMissingTimeTask)
|
mHandler.removeCallbacks(mRequestBlockMissingTimeTask)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
|
||||||
super.onResume()
|
|
||||||
|
|
||||||
val intent = Intent(this, NetworkService::class.java)
|
|
||||||
if (bindService(intent, this, Context.BIND_AUTO_CREATE)) {
|
|
||||||
mShouldUnbindNetwork = true
|
|
||||||
} else {
|
|
||||||
Log.e(TAG, "Binding to the network service failed.")
|
|
||||||
}
|
|
||||||
mHandler.postDelayed(mCheckMissingPaymentsTask, Constants.MISSING_PAYMENT_CHECK_PERIOD)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
if(!mCompositeDisposable.isDisposed) mCompositeDisposable.dispose()
|
if(!mCompositeDisposable.isDisposed) mCompositeDisposable.dispose()
|
||||||
|
|
Loading…
Reference in a new issue