Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2013-04-20 08:30:40 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2013-04-20 08:30:40 (GMT)
commit0d7b7fa1b21dee3a1b1e452d76282338866ad317 (patch)
tree2517cba2e07d32ba390358d23918b738f36b7a70
parent2f2dd3fd1a474d01c7bb189a73c0a96702c87ca4 (diff)
Be not confusing, resubscription is not reconnection
-rw-r--r--sugar_network/client/commands.py58
1 files changed, 27 insertions, 31 deletions
diff --git a/sugar_network/client/commands.py b/sugar_network/client/commands.py
index a81a91c..8290e4b 100644
--- a/sugar_network/client/commands.py
+++ b/sugar_network/client/commands.py
@@ -333,43 +333,39 @@ class ClientCommands(db.CommandsProcessor, Commands, journal.Commands):
def _remote_connect(self):
+ def listen_for_events():
+ while True:
+ ts = time.time()
+ try:
+ for event in self._node.subscribe():
+ if event.get('document') == 'implementation':
+ mtime = event.get('props', {}).get('mtime')
+ if mtime:
+ injector.invalidate_solutions(mtime)
+ self.broadcast(event)
+ except Exception:
+ exception(_logger, 'Failed on subscription')
+ if time.time() - ts < _RECONNECT_MINIMUM:
+ _logger.info('Subscription aborted')
+ break
+
def connect():
for url in self._remote_urls:
self.broadcast({'event': 'inline', 'state': 'connecting'})
- while True:
- subscription = None
- try:
- _logger.debug('Connecting to %r node', url)
- self._node = client.Client(url)
- info = self._node.get(cmd='info')
- subscription = self._node.subscribe()
- except Exception:
- exception(_logger, 'Cannot connect to %r node', url)
- if subscription is None:
- self._got_offline()
- break
+ try:
+ _logger.debug('Connecting to %r node', url)
+ self._node = client.Client(url)
+ info = self._node.get(cmd='info')
impl_info = info['documents'].get('implementation')
if impl_info:
injector.invalidate_solutions(impl_info['mtime'])
- if not self._inline.is_set():
- _logger.info('Connected to %r node', url)
- self._got_online()
- ts = time.time()
- try:
- for event in subscription:
- if event.get('document') == 'implementation':
- mtime = event.get('props', {}).get('mtime')
- if mtime:
- injector.invalidate_solutions(mtime)
- self.broadcast(event)
- except Exception:
- exception(_logger, 'Server subscription failed')
- if time.time() - ts < _RECONNECT_MINIMUM:
- _logger.info('Got disconnected from %r', url)
- self._node.close()
- self._got_offline()
- break
- _logger.debug('Got disconnected from %r, reconnect', url)
+ _logger.info('Connected to %r node', url)
+ self._got_online()
+ listen_for_events()
+ except Exception:
+ exception(_logger, 'Connection to %r failed', url)
+ self._node.close()
+ self._got_offline()
if not self._node_job and util.default_route_exists():
self._node_job.spawn(connect)