Пример #1
0
class RegistryClient(object, IRegistryClient):
    def __init__(self, update_period=10, refresh_callback=None, server_uri=None):
        if server_uri:
            self.server_uri = server_uri
        else:
            self.server_uri = SERVER_URI

        self.__refresh_callback = refresh_callback
        self.__update_period = update_period
        self.__socket = Socket(self.server_uri)
        self.__registry = Registry()
        self.refresh()
        self.__update_thread = UpdateThread(self, update_period)
        self.__update_thread.daemon = True
        self.__update_thread.start()

    def get(self, key):
        return self.__registry.get(key)

    def set(self, key, value):
        return self.__registry.set(key, value)

    def remove(self, key):
        return self.__registry.remove(key)

    def refresh(self):
        current_version = self.__socket.send('get_version')
        if self.__registry.get_version() != current_version:
            self._load()
            if self.__refresh_callback:
                self.__refresh_callback(self)

    def _load(self):
        try:
            (version, values) = self.__socket.send('get_values')
            self.__registry.set_values(values, version)
        except Exception, err:
            print "Ops:", err
            pass