From f374b49dfa9f0e6b6d7133c6f4fba3545b618d29 Mon Sep 17 00:00:00 2001 From: dwlee Date: Fri, 22 May 2015 17:01:16 +0900 Subject: [PATCH 1/3] fix bug in launch app id function --- .../android_remocons/common_tools/rocon/AppLauncher.java | 2 +- rocon_remocon/build.gradle | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/common_tools/src/main/java/com/github/rosjava/android_remocons/common_tools/rocon/AppLauncher.java b/common_tools/src/main/java/com/github/rosjava/android_remocons/common_tools/rocon/AppLauncher.java index c964cc9..31f727c 100644 --- a/common_tools/src/main/java/com/github/rosjava/android_remocons/common_tools/rocon/AppLauncher.java +++ b/common_tools/src/main/java/com/github/rosjava/android_remocons/common_tools/rocon/AppLauncher.java @@ -252,7 +252,7 @@ static private Result launchAndroidAppWithAppId(final Activity parent, final Roc } } } - { + else{ result = Result.NOT_INSTALLED; } return result; diff --git a/rocon_remocon/build.gradle b/rocon_remocon/build.gradle index 0b59a60..f390ceb 100644 --- a/rocon_remocon/build.gradle +++ b/rocon_remocon/build.gradle @@ -48,8 +48,8 @@ android { defaultConfig { minSdkVersion 15 targetSdkVersion 15 - versionCode 6 - versionName "1.2.2" + versionCode 7 + versionName "1.2.3" } productFlavors { indigo { From aaefd6e7afbb736ed21af47542f80be6d437c797 Mon Sep 17 00:00:00 2001 From: dwlee Date: Thu, 16 Jul 2015 11:09:44 +0900 Subject: [PATCH 2/3] add exception handler as update throwing exception in rocon_rosjava_core --- .../rocon/InteractionsManager.java | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/common_tools/src/main/java/com/github/rosjava/android_remocons/common_tools/rocon/InteractionsManager.java b/common_tools/src/main/java/com/github/rosjava/android_remocons/common_tools/rocon/InteractionsManager.java index 6774177..0a4df93 100644 --- a/common_tools/src/main/java/com/github/rosjava/android_remocons/common_tools/rocon/InteractionsManager.java +++ b/common_tools/src/main/java/com/github/rosjava/android_remocons/common_tools/rocon/InteractionsManager.java @@ -160,7 +160,20 @@ public void getAppsForRole(final MasterId masterId, final String role) { new AsyncTask() { @Override protected Void doInBackground(Void... params) { - getAppsForRole(); + try { + getAppsForRole(); + } catch (ServiceNotFoundException e) { + e.printStackTrace(); + try { + throw new ServiceNotFoundException(e); + } catch (ServiceNotFoundException e1) { + e1.printStackTrace(); + } + } catch (RosRuntimeException e){ + e.printStackTrace(); + throw new RosRuntimeException(e); + + } return null; } }.execute(); // TODO: can we use this to incorporate a timeout to service calls? @@ -223,7 +236,7 @@ protected Void doInBackground(Void... params) { } } - private void getAppsForRole() { + private void getAppsForRole() throws ServiceNotFoundException, RosRuntimeException { // call get_roles_and_apps concert service ServiceClient srvClient; String serviceName = this.interactionsNamespace + "/get_interactions"; @@ -233,7 +246,10 @@ private void getAppsForRole() { srvClient = connectedNode.newServiceClient(serviceName, GetInteractions._TYPE); } catch (ServiceNotFoundException e) { Log.i("InteractionsMng", "List interactions service not found [" + serviceName + "]"); - throw new RosRuntimeException(e); // TODO we should recover from this calling onFailure on listener + throw new ServiceNotFoundException(e); // TODO we should recover from this calling onFailure on listener + } catch(RosRuntimeException e){ + Log.i("InteractionsMng", "Getting interactions service is failure [" + serviceName + "]"); + throw new RosRuntimeException(e); } final GetInteractionsRequest request = srvClient.newMessage(); @@ -363,7 +379,13 @@ public void onStart(final ConnectedNode connectedNode) { requestAppUse(); break; case GET_INTERACTIONS_FOR_ROLE: - getAppsForRole(); + try { + getAppsForRole(); + } catch (ServiceNotFoundException e) { + e.printStackTrace(); + } catch(RosRuntimeException e){ + e.printStackTrace(); + } break; case GET_INTERACTION_INFO: getAppInfo(); From d8f7d97ddd16bd972a02b8c8d8edbd8bb3ca3631 Mon Sep 17 00:00:00 2001 From: dwlee Date: Thu, 16 Jul 2015 11:11:48 +0900 Subject: [PATCH 3/3] update launching anonymouse node name and launched nodes are shutdown when errors are happened --- .../common_tools/master/ConcertChecker.java | 33 ++++++++++++++++--- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/common_tools/src/main/java/com/github/rosjava/android_remocons/common_tools/master/ConcertChecker.java b/common_tools/src/main/java/com/github/rosjava/android_remocons/common_tools/master/ConcertChecker.java index c61d118..f6ecd2c 100644 --- a/common_tools/src/main/java/com/github/rosjava/android_remocons/common_tools/master/ConcertChecker.java +++ b/common_tools/src/main/java/com/github/rosjava/android_remocons/common_tools/master/ConcertChecker.java @@ -55,6 +55,7 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.Date; +import java.util.UUID; /** * Threaded ROS-concert checker. Runs a thread which checks for a valid ROS @@ -84,6 +85,9 @@ public interface FailureHandler { private CheckerThread checkerThread; private ConcertDescriptionReceiver foundConcertCallback; private FailureHandler failureCallback; + private NodeMainExecutorService nodeMainExecutorService = null; + private MasterInfo masterInfo = null; + private RoconInteractions roconInteractions = null; /** * Constructor. Should not take any time. @@ -153,28 +157,37 @@ public void run() { String version = (String) paramClient.getParam(GraphName.of("/rosversion")).getResult(); Log.i("Remocon", "r ros master found [" + version + "]"); - NodeMainExecutorService nodeMainExecutorService = new NodeMainExecutorService(); + nodeMainExecutorService = new NodeMainExecutorService(); NodeConfiguration nodeConfiguration = NodeConfiguration.newPublic( InetAddressFactory.newNonLoopback().getHostAddress(), concertUri); // Check for the concert information topic - MasterInfo masterInfo = new MasterInfo(); - RoconInteractions roconInteractions = new RoconInteractions(Constants.ANDROID_PLATFORM_INFO.getUri()); + masterInfo = new MasterInfo(); + roconInteractions = new RoconInteractions(Constants.ANDROID_PLATFORM_INFO.getUri()); + + String masterInfoNodeName = "master_info_node" + UUID.randomUUID().toString().replace("-", "_"); + String roconInteractionsNodeName = "rocon_interactions_node" + UUID.randomUUID().toString().replace("-", "_"); + + Log.i("Remocon", "masterInfoNodeName: " + masterInfoNodeName); + Log.i("Remocon", "roconInteractionsNodeName: " + roconInteractionsNodeName); nodeMainExecutorService.execute( masterInfo, - nodeConfiguration.setNodeName("master_info_node") + nodeConfiguration.setNodeName(masterInfoNodeName) ); masterInfo.waitForResponse(); // MasterInfoExc. on timeout, listener or ros runtime errors Log.i("Remocon", "master info found"); + nodeMainExecutorService.execute( roconInteractions, - nodeConfiguration.setNodeName("rocon_interactions_node") + nodeConfiguration.setNodeName(roconInteractionsNodeName) ); roconInteractions.waitForResponse(); // InteractionsExc. on timeout, service or ros runtime errors Log.i("Remocon", "rocon interactions found"); // configure concert description + + Date timeLastSeen = new Date(); RoconDescription description = new RoconDescription( masterId, @@ -184,6 +197,7 @@ public void run() { roconInteractions.getNamespace(), timeLastSeen); + Log.i("Remocon", "finish creation RoconDescription"); description.setConnectionStatus(RoconDescription.OK); description.setUserRoles(roconInteractions.getRoles()); foundConcertCallback.receive(description); @@ -207,6 +221,15 @@ public void run() { } catch (Throwable e) { Log.w("Remocon", "exception while creating node in concert checker for URI " + concertUri, e); failureCallback.handleFailure("unknown exception in the rocon checker [" + e.toString() + "]"); + }finally { + if (nodeMainExecutorService != null){ + if (masterInfo != null){ + nodeMainExecutorService.shutdownNodeMain(masterInfo); + } + if (roconInteractions != null){ + nodeMainExecutorService.shutdownNodeMain(roconInteractions); + } + } } } }