package org.freertr.user; import java.util.List; import org.freertr.cfg.cfgAll; import org.freertr.cfg.cfgInit; import org.freertr.util.bits; import org.freertr.util.logger; import org.freertr.util.notifier; /** * stores one reload request * * @author matecsaba */ public class userReload implements Runnable { /** * time when reload will happen */ public final long when; /** * mode */ public final int code; /** * interval between checks */ public int interval = 60000; private boolean need2run = true; private final notifier notif; public String toString() { return bits.time2str(cfgAll.timeZoneName, when + cfgAll.timeServerOffset, 3); } /** * schedule reload * * @param mod mode: false=warm, true=cold * @param tim time */ public userReload(boolean mod, long tim) { if (mod) { code = 4; } else { code = 5; } when = tim; notif = new notifier(); new Thread(this).start(); } /** * get reload time * * @param rel what to query * @return show lines */ public static List reloadShow(userReload rel) { if (rel == null) { return bits.str2lst("no scheduled reload"); } return bits.str2lst(bits.timeLeft(rel.when) + " to reload, will happen at " + rel + " with code " + rel.code); } /** * stop working */ public void stopWorking() { need2run = false; notif.wakeup(); } public void run() { try { doer(); } catch (Exception e) { logger.traceback(e); } } private void doer() { logger.error("reload scheduled to " + this); for (;;) { notif.sleep(interval); if (!need2run) { break; } if (bits.getTime() > when) { cfgInit.stopRouter(true, 5, "timed request"); } logger.warn(bits.timeLeft(when) + " to reload"); } logger.error("reload canceled from " + this); } }