summaryrefslogtreecommitdiff
path: root/python/rvilib.py
diff options
context:
space:
mode:
authorMagnus Feuer <mfeuer@jaguarlandrover.com>2015-03-04 19:14:16 -0800
committerMagnus Feuer <mfeuer@jaguarlandrover.com>2015-03-04 19:14:16 -0800
commita59e0d6f1a4c51fc249309de9158395a2bed92c5 (patch)
tree66b6edb65df0b24a388ec1c0225e9196ae808014 /python/rvilib.py
parent9f11329836f8710274102b6d57d1ebc65a3ec31b (diff)
downloadrvi_core-a59e0d6f1a4c51fc249309de9158395a2bed92c5.tar.gz
Added register/unregister. Added get_services.py to list all available services
Diffstat (limited to 'python/rvilib.py')
-rw-r--r--python/rvilib.py55
1 files changed, 50 insertions, 5 deletions
diff --git a/python/rvilib.py b/python/rvilib.py
index d40ec64..ba43bf9 100644
--- a/python/rvilib.py
+++ b/python/rvilib.py
@@ -30,6 +30,7 @@ class RVI(SimpleJSONRPCServer):
SimpleJSONRPCServer.__init__(self,addr=((self.rvi_address, self.rvi_port)), logRequests=False)
self.rvi_client = Server(rvi_node_url)
self.serve_thread = False
+ self.registered_services = dict()
# Set the callback to invoke when RVI reports that one or more new
# services are available for invocation somewhere in the network.
@@ -43,7 +44,13 @@ class RVI(SimpleJSONRPCServer):
# Arguments will be an array of fully qualified service names no longer available.
def set_services_unavailable_callback(self, function):
self.register_function(function, 'services_unavailable')
-
+
+ def get_available_services(self):
+ # We need at least one dummy argument for the RPC to go
+ # through on the RVI side.
+ res = self.rvi_client.get_available_services(1)
+ return res['services']
+
# Register a service in this python program that should
# be reached from the rest of the network.
#
@@ -83,10 +90,39 @@ class RVI(SimpleJSONRPCServer):
if self.serve_thread == False:
self.start_serve_thread()
+ full_service_name = res['service']
+ self.registered_services[service_name] = full_service_name
# Return the fully qualified service name
return res['service']
+ # Unregister a service
+ # Unregisters a service previously registered with register_service
+ # The provided 'service_name' is identical to that provided tgo
+ # retister_service()
+ #
+ def unregister_service(self, service_name):
+
+ # Check that the service has been previously registered
+ # If not just return
+ if service_name not in self.registered_services:
+ return False
+
+
+ # Retrieve the fully qualified service name that
+ # we need to unregister from rvi
+ full_service_name = self.registered_services[service_name]
+
+ # Delete dictionary entry
+ del self.registered_services[service_name]
+
+ #
+ # Unregister the service from RVI
+ #
+ res = self.rvi_client.unregister_service(service=full_service_name)
+
+ return True
+
def start_serve_thread(self):
self.serve_thread = threading.Thread(target=self.serve_forever)
self.serve_thread.start()
@@ -104,11 +140,20 @@ class RVI(SimpleJSONRPCServer):
# service that registered 'service_name' in the network.
#
def message(self, service_name, parameters, timeout = int(time.time()) + 60 ):
- self.rvi_client.message(calling_service= "not_used",
- service_name = service_name,
- timeout = timeout,
- parameters = parameters)
+ self.rvi_client.message(service_name = service_name,
+ timeout = timeout,
+ parameters = parameters)
+
+ #
+ # Redefined shutdown method that first unregisters all services.
+ #
+ def shutdown(self):
+ for service in self.registered_services:
+ self.unregister_service(service)
+
+ SimpleJSONRPCServer.shutdown(self)
+
#
# Check if method is 'message', if so dispatch on
# name 'service_name' instead.