/*------------------------------------------------------------------------- svninfo: $Id$ Maarten's Mud, WWW-based MUD using MYSQL Copyright (C) 1998 Maarten van Leunen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Maarten van Leunen Appelhof 27 5345 KA Oss Nederland Europe maarten_l@yahoo.com -------------------------------------------------------------------------*/ package mmud; import java.util.logging.Logger; import mmud.characters.PersonException; import mmud.characters.Persons; import mmud.database.Database; /** * the class that takes care of the passing of time and the events that can * occur with the passing of time. Examples of this are: * <ul> * <li>setting sun * <li>deteriorating items * <li>cleaning up of idle users. * </ul> */ public class TickerThread implements Runnable { private static boolean theStarted = false; public TickerThread() { Logger.getLogger("mmud").finer(""); } /** * Starts counting the minutes from the start of the game. */ int theCounter = 0; /** * Run method of the thread. This is started when the start method is * called. */ public void run() { Logger.getLogger("mmud").finer(""); if (theStarted) { throw new RuntimeException("Ticker thread already started!"); } theStarted = true; try { Thread.sleep(3000); } catch (InterruptedException e) { } while (!Constants.shutdown) { try { Thread.sleep(60000); } catch (InterruptedException e) { } Logger.getLogger("mmud").finer("counter=" + theCounter); try { /* every hour on the hour */ if (theCounter % 60 == 0) { Persons.removeIdleUsers(); } if (theCounter == 0) { Database.moveLogsToOld(); } if (Constants.events_active) { Database.runEvents(); } } catch (PersonException e) { Database.writeLog("root", e); e.printStackTrace(); } catch (MudException e) { Database.writeLog("root", e); e.printStackTrace(); } theCounter++; if (theCounter == 24 * 60) { /** * reset after one full day. */ theCounter = 0; } } // neverending loop. } }