diff src/cagou/core/cagou_main.py @ 64:8e16abcadbb8

core: launch SàT backend as a service on Android and wait for it on pb bridge connection.
author Goffi <goffi@goffi.org>
date Tue, 13 Dec 2016 23:10:43 +0100
parents af4f986d86f0
children 1c738621bc8d
line wrap: on
line diff
--- a/src/cagou/core/cagou_main.py	Tue Dec 13 23:10:41 2016 +0100
+++ b/src/cagou/core/cagou_main.py	Tue Dec 13 23:10:43 2016 +0100
@@ -234,6 +234,12 @@
         if bridge_name == 'embedded':
             from sat.core import sat_main
             self.sat = sat_main.SAT()
+        if sys.platform == 'android':
+            from android import AndroidService
+            service = AndroidService(u'Cagou (SàT)'.encode('utf-8'), u'Salut à Toi backend'.encode('utf-8'))
+            service.start(u'service started')
+            self.service = service
+
         bridge_module = dynamic_import.bridge(bridge_name, 'sat_frontends.bridge')
         if bridge_module is None:
             log.error(u"Can't import {} bridge".format(bridge_name))
@@ -260,6 +266,20 @@
         super(Cagou, self)._bridgeCb()
         self.bridge.getReady(self.onBackendReady)
 
+    def _bridgeEb(self, failure):
+        if bridge_name == "pb" and sys.platform == "android":
+            try:
+                self.retried += 1
+            except AttributeError:
+                self.retried = 1
+            from twisted.internet.error import ConnectionRefusedError
+            if failure.check(ConnectionRefusedError) and self.retried < 100:
+                if self.retried % 20 == 0:
+                    log.debug("backend not ready, retrying ({})".format(self.retried))
+                Clock.schedule_once(lambda dummy: self.connectBridge(), 0.05)
+                return
+        super(Cagou, self)._bridgeEb(failure)
+
     def run(self):
         self.connectBridge()
         self.app.bind(on_stop=self.onStop)