From: Kimmo R. <ki...@us...> - 2009-12-30 00:51:35
|
Update of /cvsroot/arianne/stendhal/src/games/stendhal/server/entity/trade In directory sfp-cvsdas-1.v30.ch3.sourceforge.com:/tmp/cvs-serv32286/src/games/stendhal/server/entity/trade Modified Files: Earning.java Market.java Offer.java Added Files: Dateable.java Log Message: Added timestamps to earnings. Added a method to get older than specified time earnings to Market. Refactored all the get*OlderThan methods to use the same code. Added test for getEarningsOlderThan. Index: Offer.java =================================================================== RCS file: /cvsroot/arianne/stendhal/src/games/stendhal/server/entity/trade/Offer.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** Offer.java 26 Dec 2009 21:09:10 -0000 1.8 --- Offer.java 30 Dec 2009 00:17:30 -0000 1.9 *************** *** 16,20 **** import org.apache.log4j.Logger; ! public class Offer extends Entity { private static final Logger logger = Logger.getLogger(Offer.class); --- 16,20 ---- import org.apache.log4j.Logger; ! public class Offer extends Entity implements Dateable { private static final Logger logger = Logger.getLogger(Offer.class); Index: Earning.java =================================================================== RCS file: /cvsroot/arianne/stendhal/src/games/stendhal/server/entity/trade/Earning.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** Earning.java 27 Dec 2009 10:12:06 -0000 1.7 --- Earning.java 30 Dec 2009 00:17:30 -0000 1.8 *************** *** 1,11 **** package games.stendhal.server.entity.trade; ! import games.stendhal.server.entity.PassiveEntity; import marauroa.common.game.RPClass; import marauroa.common.game.RPObject; import marauroa.common.game.Definition.Type; ! public class Earning extends PassiveEntity { ! public static final String EARNING_RPCLASS_NAME = "earning"; --- 1,12 ---- package games.stendhal.server.entity.trade; ! import org.apache.log4j.Logger; ! ! import games.stendhal.server.entity.Entity; import marauroa.common.game.RPClass; import marauroa.common.game.RPObject; import marauroa.common.game.Definition.Type; ! public class Earning extends Entity implements Dateable { public static final String EARNING_RPCLASS_NAME = "earning"; *************** *** 13,16 **** --- 14,18 ---- private static final String REWARD_ATTRIBUTE = "reward"; private static final String NAME_ATTRIBUTE = "sellerName"; + private static final String TIMESTAMP_ATTRIBUTE = "timestamp"; private final Integer value; *************** *** 23,26 **** --- 25,29 ---- earningClass.addAttribute(NAME_ATTRIBUTE, Type.STRING); earningClass.addAttribute(REWARD_ATTRIBUTE, Type.INT); + earningClass.addAttribute(TIMESTAMP_ATTRIBUTE, Type.STRING); } *************** *** 40,47 **** put(NAME_ATTRIBUTE, sellerName); put(REWARD_ATTRIBUTE, shouldReward ? 1 : 0); } public Earning(final RPObject object) { ! this(Integer.valueOf(object.getInt(VALUE_ATTRIBUTE)),object.get(NAME_ATTRIBUTE), object.getInt(REWARD_ATTRIBUTE) != 0); } --- 43,54 ---- put(NAME_ATTRIBUTE, sellerName); put(REWARD_ATTRIBUTE, shouldReward ? 1 : 0); + put(TIMESTAMP_ATTRIBUTE, Long.toString(System.currentTimeMillis())); } public Earning(final RPObject object) { ! super(object); ! setRPClass(EARNING_RPCLASS_NAME); ! value = getInt(VALUE_ATTRIBUTE); ! sellerName = get(NAME_ATTRIBUTE); } *************** *** 60,62 **** --- 67,79 ---- return (getInt(REWARD_ATTRIBUTE) != 0); } + + public long getTimestamp() { + long timeStamp = 0; + try { + timeStamp = Long.parseLong(get(TIMESTAMP_ATTRIBUTE)); + } catch (final NumberFormatException e) { + Logger.getLogger(Earning.class).error("Invalid timestamp: " + get(TIMESTAMP_ATTRIBUTE), e); + } + return timeStamp; + } } Index: Market.java =================================================================== RCS file: /cvsroot/arianne/stendhal/src/games/stendhal/server/entity/trade/Market.java,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** Market.java 26 Dec 2009 21:53:43 -0000 1.29 --- Market.java 30 Dec 2009 00:17:30 -0000 1.30 *************** *** 169,172 **** --- 169,173 ---- final Earning earning = new Earning(offer.getPrice(), offer.getOfferer(), reward); this.getSlot(EARNINGS_SLOT_NAME).add(earning); + earnings.add(earning); offers.remove(offer); this.getSlot(OFFERS_SLOT_NAME).remove(offer.getID()); *************** *** 333,341 **** } ! private List<Offer> getOlderThan(List<Offer> list, int seconds) { ! List<Offer> old = new LinkedList<Offer>(); ! for (Offer offer : list) { ! if (System.currentTimeMillis() > offer.getTimestamp() + 1000L * seconds) { ! old.add(offer); } } --- 334,355 ---- } ! /** ! * Get a list of expired offers whose timestamp is older than specified. ! * ! * @param seconds age of offers in seconds ! * @return list of expired offers that are older than the specified time ! */ ! public List<Earning> getEarningsOlderThan(int seconds) { ! return getOlderThan(earnings, seconds); ! } ! ! private <T extends Dateable> List<T> getOlderThan(Iterable<T> set, int seconds) { ! List<T> old = new LinkedList<T>(); ! for (T obj : set) { ! if (obj instanceof Earning) { ! System.err.println("EARNING!"); ! } ! if (System.currentTimeMillis() > obj.getTimestamp() + 1000L * seconds) { ! old.add(obj); } } --- NEW FILE: Dateable.java --- package games.stendhal.server.entity.trade; public interface Dateable { long getTimestamp(); } |