- Modified the ConnectionStatusUpdate class in order to allow it to send more than just connection/disconnection events
- Allowing the NetworkService to be queried about specific API ids
This commit is contained in:
parent
364c31c78c
commit
66ce8a4ba4
3 changed files with 77 additions and 15 deletions
|
@ -1,24 +1,65 @@
|
|||
package cy.agorise.graphenej.api;
|
||||
|
||||
/**
|
||||
* Class used to send connection status updates
|
||||
* Class used to send connection status updates.
|
||||
*
|
||||
* Connection status updates can be any of the following:
|
||||
* - {@link ConnectionStatusUpdate#CONNECTED}
|
||||
* - {@link ConnectionStatusUpdate#AUTHENTICATED}
|
||||
* - {@link ConnectionStatusUpdate#API_UPDATE}
|
||||
* - {@link ConnectionStatusUpdate#DISCONNECTED}
|
||||
*
|
||||
* This is specified by the field called {@link #updateCode}.
|
||||
*
|
||||
* If the updateCode is ConnectionStatusUpdate#API_UPDATE another extra field called
|
||||
* {@link #api} is used to specify which api we're getting access to.
|
||||
*/
|
||||
|
||||
public class ConnectionStatusUpdate {
|
||||
public final static String CONNECTED = "Connected";
|
||||
public final static String DISCONNECTED = "Disconnected";
|
||||
// Constant used to announce that a connection has been established
|
||||
public final static int CONNECTED = 0;
|
||||
// Constant used to announce a successful authentication
|
||||
public final static int AUTHENTICATED = 1;
|
||||
// Constant used to announce an api update
|
||||
public final static int API_UPDATE = 2;
|
||||
// Constant used to announce a disconnection event
|
||||
public final static int DISCONNECTED = 3;
|
||||
|
||||
private String connectionStatus;
|
||||
/**
|
||||
* The update code is the general purpose of the update message. Can be any of the following:
|
||||
* - {@link ConnectionStatusUpdate#CONNECTED}
|
||||
* - {@link ConnectionStatusUpdate#AUTHENTICATED}
|
||||
* - {@link ConnectionStatusUpdate#API_UPDATE}
|
||||
* - {@link ConnectionStatusUpdate#DISCONNECTED}
|
||||
*/
|
||||
private int updateCode;
|
||||
|
||||
public ConnectionStatusUpdate(String status){
|
||||
this.connectionStatus = status;
|
||||
/**
|
||||
* This field is used in case the updateCode is {@link ConnectionStatusUpdate#API_UPDATE} and
|
||||
* it serves to specify which API we're getting access to.
|
||||
*
|
||||
* It can be any of the fields defined in {@link ApiAccess}
|
||||
*/
|
||||
private int api;
|
||||
|
||||
public ConnectionStatusUpdate(int updateCode, int api){
|
||||
this.updateCode = updateCode;
|
||||
this.api = api;
|
||||
}
|
||||
|
||||
public String getConnectionStatus() {
|
||||
return connectionStatus;
|
||||
public int getUpdateCode() {
|
||||
return updateCode;
|
||||
}
|
||||
|
||||
public void setConnectionStatus(String connectionStatus) {
|
||||
this.connectionStatus = connectionStatus;
|
||||
public void setUpdateCode(int updateCode) {
|
||||
this.updateCode = updateCode;
|
||||
}
|
||||
|
||||
public int getApi() {
|
||||
return api;
|
||||
}
|
||||
|
||||
public void setApi(int api) {
|
||||
this.api = api;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -89,7 +89,7 @@ public class NetworkService extends Service {
|
|||
private int mRequestedApis;
|
||||
|
||||
// Variable used to keep track of the currently obtained API accesses
|
||||
private HashMap<Integer, Integer> mApiIds = new HashMap();
|
||||
private HashMap<Integer, Integer> mApiIds = new HashMap<Integer, Integer>();
|
||||
|
||||
private ArrayList<String> mNodeUrls = new ArrayList<>();
|
||||
|
||||
|
@ -217,7 +217,7 @@ public class NetworkService extends Service {
|
|||
mWebSocket = webSocket;
|
||||
|
||||
// Notifying all listeners about the new connection status
|
||||
RxBus.getBusInstance().send(new ConnectionStatusUpdate(ConnectionStatusUpdate.CONNECTED));
|
||||
RxBus.getBusInstance().send(new ConnectionStatusUpdate(ConnectionStatusUpdate.CONNECTED, ApiAccess.API_NONE));
|
||||
|
||||
// If we're not yet logged in, we should do it now
|
||||
if(!isLoggedIn){
|
||||
|
@ -251,12 +251,18 @@ public class NetworkService extends Service {
|
|||
// Storing the "database" api id
|
||||
mApiIds.put(ApiAccess.API_DATABASE, apiIdResponse.result);
|
||||
|
||||
// Broadcasting result
|
||||
RxBus.getBusInstance().send(new ConnectionStatusUpdate(ConnectionStatusUpdate.API_UPDATE, ApiAccess.API_DATABASE));
|
||||
|
||||
checkNextRequestedApiAccess();
|
||||
}else if(mLastCall.equals(RPC.CALL_HISTORY)){
|
||||
// Deserializing integer response
|
||||
Type IntegerJsonResponse = new TypeToken<JsonRpcResponse<Integer>>(){}.getType();
|
||||
JsonRpcResponse<Integer> apiIdResponse = gson.fromJson(text, IntegerJsonResponse);
|
||||
|
||||
// Broadcasting result
|
||||
RxBus.getBusInstance().send(new ConnectionStatusUpdate(ConnectionStatusUpdate.API_UPDATE, ApiAccess.API_HISTORY));
|
||||
|
||||
// Storing the "history" api id
|
||||
mApiIds.put(ApiAccess.API_HISTORY, apiIdResponse.result);
|
||||
|
||||
|
@ -266,6 +272,9 @@ public class NetworkService extends Service {
|
|||
Type IntegerJsonResponse = new TypeToken<JsonRpcResponse<Integer>>(){}.getType();
|
||||
JsonRpcResponse<Integer> apiIdResponse = gson.fromJson(text, IntegerJsonResponse);
|
||||
|
||||
// Broadcasting result
|
||||
RxBus.getBusInstance().send(new ConnectionStatusUpdate(ConnectionStatusUpdate.API_UPDATE, ApiAccess.API_NETWORK_BROADCAST));
|
||||
|
||||
// Storing the "network_broadcast" api access
|
||||
mApiIds.put(ApiAccess.API_NETWORK_BROADCAST, apiIdResponse.result);
|
||||
|
||||
|
@ -383,7 +392,8 @@ public class NetworkService extends Service {
|
|||
@Override
|
||||
public void onClosed(WebSocket webSocket, int code, String reason) {
|
||||
super.onClosed(webSocket, code, reason);
|
||||
RxBus.getBusInstance().send(new ConnectionStatusUpdate(ConnectionStatusUpdate.DISCONNECTED));
|
||||
Log.d(TAG,"onClosed");
|
||||
RxBus.getBusInstance().send(new ConnectionStatusUpdate(ConnectionStatusUpdate.DISCONNECTED, ApiAccess.API_NONE));
|
||||
|
||||
isLoggedIn = false;
|
||||
}
|
||||
|
@ -406,7 +416,7 @@ public class NetworkService extends Service {
|
|||
Log.e(TAG,"Response: "+response.message());
|
||||
}
|
||||
|
||||
RxBus.getBusInstance().send(new ConnectionStatusUpdate(ConnectionStatusUpdate.DISCONNECTED));
|
||||
RxBus.getBusInstance().send(new ConnectionStatusUpdate(ConnectionStatusUpdate.DISCONNECTED, ApiAccess.API_NONE));
|
||||
mSocketIndex++;
|
||||
|
||||
if(mSocketIndex > mNodeUrls.size() * 3){
|
||||
|
@ -417,4 +427,15 @@ public class NetworkService extends Service {
|
|||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Method used to check whether or not the network service is connected to a node that
|
||||
* offers a specific API.
|
||||
*
|
||||
* @param whichApi The API we want to use.
|
||||
* @return True if the node has got that API enabled, false otherwise
|
||||
*/
|
||||
public boolean hasApiId(int whichApi){
|
||||
return mApiIds.get(whichApi) != null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ public class ListAssets implements ApiCallable {
|
|||
/**
|
||||
* Internal constant used to represent the maximum limit of assets retrieved in one call.
|
||||
*/
|
||||
private final int MAX_BATCH_SIZE = 100;
|
||||
public static final int MAX_BATCH_SIZE = 100;
|
||||
|
||||
private String lowerBound;
|
||||
private int limit;
|
||||
|
|
Loading…
Reference in a new issue