- Storing connectivity status at the FullNode class
- Flipping this flag accordingly at the NetworkService whenever we connect/disconnect from a specific node - Notifying the NodeLatencyVerifier of this change
This commit is contained in:
parent
3bdfb777bf
commit
d109d86bf3
3 changed files with 51 additions and 4 deletions
|
@ -136,6 +136,9 @@ public class NetworkService extends Service {
|
||||||
// Counter used to trigger the connection only after we've received enough node latency updates
|
// Counter used to trigger the connection only after we've received enough node latency updates
|
||||||
private long latencyUpdateCounter;
|
private long latencyUpdateCounter;
|
||||||
|
|
||||||
|
// Property used to keep track of the currently active node
|
||||||
|
private FullNode mSelectedNode;
|
||||||
|
|
||||||
private Gson gson = new GsonBuilder()
|
private Gson gson = new GsonBuilder()
|
||||||
.registerTypeAdapter(Transaction.class, new Transaction.TransactionDeserializer())
|
.registerTypeAdapter(Transaction.class, new Transaction.TransactionDeserializer())
|
||||||
.registerTypeAdapter(TransferOperation.class, new TransferOperation.TransferDeserializer())
|
.registerTypeAdapter(TransferOperation.class, new TransferOperation.TransferDeserializer())
|
||||||
|
@ -165,9 +168,9 @@ public class NetworkService extends Service {
|
||||||
*/
|
*/
|
||||||
public void connect(){
|
public void connect(){
|
||||||
OkHttpClient client = new OkHttpClient();
|
OkHttpClient client = new OkHttpClient();
|
||||||
FullNode fullNode = nodeProvider.getBestNode();
|
mSelectedNode = nodeProvider.getBestNode();
|
||||||
Log.v(TAG,"connect.url: "+fullNode.getUrl());
|
Log.v(TAG,"connect.url: "+ mSelectedNode.getUrl());
|
||||||
Request request = new Request.Builder().url(fullNode.getUrl()).build();
|
Request request = new Request.Builder().url(mSelectedNode.getUrl()).build();
|
||||||
mWebSocket = client.newWebSocket(request, mWebSocketListener);
|
mWebSocket = client.newWebSocket(request, mWebSocketListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -254,7 +257,6 @@ public class NetworkService extends Service {
|
||||||
|
|
||||||
// Feeding all node information to the NodeProvider instance
|
// Feeding all node information to the NodeProvider instance
|
||||||
for(String nodeUrl : nodeUrls){
|
for(String nodeUrl : nodeUrls){
|
||||||
Log.d(TAG, "NodeUrl: " + nodeUrl);
|
|
||||||
nodeProvider.addNode(new FullNode(nodeUrl));
|
nodeProvider.addNode(new FullNode(nodeUrl));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -325,6 +327,12 @@ public class NetworkService extends Service {
|
||||||
public void onOpen(WebSocket webSocket, Response response) {
|
public void onOpen(WebSocket webSocket, Response response) {
|
||||||
super.onOpen(webSocket, response);
|
super.onOpen(webSocket, response);
|
||||||
|
|
||||||
|
// Marking the selected node as connected
|
||||||
|
mSelectedNode.setConnected(true);
|
||||||
|
|
||||||
|
// Updating the selected node's 'connected' status on the NodeLatencyVerifier instance
|
||||||
|
nodeLatencyVerifier.updateActiveNodeInformation(mSelectedNode);
|
||||||
|
|
||||||
// Notifying all listeners about the new connection status
|
// Notifying all listeners about the new connection status
|
||||||
RxBus.getBusInstance().send(new ConnectionStatusUpdate(ConnectionStatusUpdate.CONNECTED, ApiAccess.API_NONE));
|
RxBus.getBusInstance().send(new ConnectionStatusUpdate(ConnectionStatusUpdate.CONNECTED, ApiAccess.API_NONE));
|
||||||
|
|
||||||
|
@ -555,6 +563,16 @@ public class NetworkService extends Service {
|
||||||
RxBus.getBusInstance().send(new ConnectionStatusUpdate(ConnectionStatusUpdate.DISCONNECTED, ApiAccess.API_NONE));
|
RxBus.getBusInstance().send(new ConnectionStatusUpdate(ConnectionStatusUpdate.DISCONNECTED, ApiAccess.API_NONE));
|
||||||
|
|
||||||
isLoggedIn = false;
|
isLoggedIn = false;
|
||||||
|
|
||||||
|
// Marking the selected node as not connected
|
||||||
|
mSelectedNode.setConnected(false);
|
||||||
|
|
||||||
|
// Updating the selected node's 'connected' status on the NodeLatencyVerifier instance
|
||||||
|
nodeLatencyVerifier.updateActiveNodeInformation(mSelectedNode);
|
||||||
|
|
||||||
|
|
||||||
|
// We have currently no selected node
|
||||||
|
mSelectedNode = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -590,6 +608,14 @@ public class NetworkService extends Service {
|
||||||
}
|
}
|
||||||
}, DEFAULT_RETRY_DELAY);
|
}, DEFAULT_RETRY_DELAY);
|
||||||
}
|
}
|
||||||
|
// Marking the selected node as not connected
|
||||||
|
mSelectedNode.setConnected(false);
|
||||||
|
|
||||||
|
// Updating the selected node's 'connected' status on the NodeLatencyVerifier instance
|
||||||
|
nodeLatencyVerifier.updateActiveNodeInformation(mSelectedNode);
|
||||||
|
|
||||||
|
// We have currently no selected node
|
||||||
|
mSelectedNode = null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ public class FullNode implements Comparable {
|
||||||
|
|
||||||
private String mUrl;
|
private String mUrl;
|
||||||
private ExponentialMovingAverage latency;
|
private ExponentialMovingAverage latency;
|
||||||
|
private boolean isConnected;
|
||||||
|
|
||||||
private FullNode(){}
|
private FullNode(){}
|
||||||
|
|
||||||
|
@ -49,6 +50,14 @@ public class FullNode implements Comparable {
|
||||||
return latency.getAverage();
|
return latency.getAverage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isConnected() {
|
||||||
|
return isConnected;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConnected(boolean connected) {
|
||||||
|
isConnected = connected;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method that updates the latency average with a new value.
|
* Method that updates the latency average with a new value.
|
||||||
* @param latency Most recent latency sample to be added to the exponential average
|
* @param latency Most recent latency sample to be added to the exponential average
|
||||||
|
|
|
@ -162,4 +162,16 @@ public class NodeLatencyVerifier {
|
||||||
webSocket.close(NetworkService.NORMAL_CLOSURE_STATUS, null);
|
webSocket.close(NetworkService.NORMAL_CLOSURE_STATUS, null);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the 'isConnected' attribute of a specific node.
|
||||||
|
* @param fullNode The node we want to update.
|
||||||
|
*/
|
||||||
|
public void updateActiveNodeInformation(FullNode fullNode){
|
||||||
|
for(FullNode node : mNodeList){
|
||||||
|
if(node.equals(fullNode)){
|
||||||
|
node.setConnected(fullNode.isConnected());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue