예제 #1
0
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)