class ContextMonitor(object): def __init__(self, presence = None): super(ContextMonitor, self).__init__() # Create the local context. self._context = Context() # Subscribe to Presence announcements. if presence == None: self._presence = Presence() self._presence.connect() else: self._presence = presence self._presence.subscribe('scavenger', self.receive_announcement) def receive_announcement(self, peer_name, peer_address, service): peer_name = peer_name.strip('\x00 ') cpu_strength, cpu_cores, active_tasks, network_media = struct.unpack("!fIII", service.data) peer = ScavengerPeer(peer_name, (peer_address, service.port), cpu_strength, cpu_cores, active_tasks, network_media) self._context.add(peer) def get_peers(self): return self._context.get_peers() def has_peer(self, name): return self._context.has_peer(name) def increment_peer_activity(self, name): self._context.increment_peer_activity(name) def decrement_peer_activity(self, name): self._context.decrement_peer_activity(name) def shutdown(self): self._presence.shutdown(True)