Improving logging for detecting bad performance.
This commit is contained in:
@@ -8,26 +8,22 @@ public class LoggingThreadLocal {
|
||||
private static ThreadLocal<StringBuilder> _logLocal = new ThreadLocal<StringBuilder>();
|
||||
private static ThreadLocal<Long> _start = new ThreadLocal<Long>();
|
||||
|
||||
public static boolean isStarting() {
|
||||
if (_logLocal.get() == null) {
|
||||
_logLocal.set(new StringBuilder());
|
||||
_start.set(System.currentTimeMillis());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
public static void start() {
|
||||
_logLocal.set(new StringBuilder());
|
||||
_start.set(System.currentTimeMillis());
|
||||
}
|
||||
|
||||
public static void log(PhysicalCard card, String desc) {
|
||||
StringBuilder builder = _logLocal.get();
|
||||
if (builder != null)
|
||||
if (builder != null && card != null)
|
||||
builder.append(card.getBlueprintId()).append(" ").append(desc).append(" - ");
|
||||
}
|
||||
|
||||
public static void stop() {
|
||||
public static void stop(boolean writeOperation) {
|
||||
long start = _start.get();
|
||||
long time = System.currentTimeMillis() - start;
|
||||
if (time > 100)
|
||||
LOG.error("Processing took " + time + "ms: \n" + _logLocal.get().toString());
|
||||
LOG.error("Processing took (" + writeOperation + ")" + time + "ms: \n" + _logLocal.get().toString());
|
||||
_start.set(null);
|
||||
_logLocal.set(null);
|
||||
}
|
||||
|
||||
@@ -188,53 +188,41 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
|
||||
|
||||
@Override
|
||||
public boolean hasKeyword(GameState gameState, PhysicalCard physicalCard, Keyword keyword) {
|
||||
boolean starting = LoggingThreadLocal.isStarting();
|
||||
try {
|
||||
LoggingThreadLocal.log(physicalCard, "hasKeyword");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.KEYWORD_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
|
||||
if (modifier.isKeywordRemoved(gameState, this, physicalCard, keyword))
|
||||
return false;
|
||||
}
|
||||
LoggingThreadLocal.log(physicalCard, "hasKeyword");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.KEYWORD_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
|
||||
if (modifier.isKeywordRemoved(gameState, this, physicalCard, keyword))
|
||||
return false;
|
||||
}
|
||||
|
||||
if (physicalCard.getBlueprint().hasKeyword(keyword))
|
||||
return true;
|
||||
if (physicalCard.getBlueprint().hasKeyword(keyword))
|
||||
return true;
|
||||
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.KEYWORD_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, physicalCard, modifier)
|
||||
&& appliesKeywordModifier(gameState, modifier.getSource(), keyword))
|
||||
if (modifier.hasKeyword(gameState, this, physicalCard, keyword))
|
||||
return true;
|
||||
}
|
||||
} finally {
|
||||
if (starting)
|
||||
LoggingThreadLocal.stop();
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.KEYWORD_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, physicalCard, modifier)
|
||||
&& appliesKeywordModifier(gameState, modifier.getSource(), keyword))
|
||||
if (modifier.hasKeyword(gameState, this, physicalCard, keyword))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getKeywordCount(GameState gameState, PhysicalCard physicalCard, Keyword keyword) {
|
||||
boolean starting = LoggingThreadLocal.isStarting();
|
||||
try {
|
||||
LoggingThreadLocal.log(physicalCard, "getKeywordCount");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.KEYWORD_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
|
||||
if (modifier.isKeywordRemoved(gameState, this, physicalCard, keyword))
|
||||
return 0;
|
||||
}
|
||||
|
||||
int result = physicalCard.getBlueprint().getKeywordCount(keyword);
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.KEYWORD_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, physicalCard, modifier)
|
||||
&& appliesKeywordModifier(gameState, modifier.getSource(), keyword))
|
||||
result += modifier.getKeywordCountModifier(gameState, this, physicalCard, keyword);
|
||||
}
|
||||
return Math.max(0, result);
|
||||
} finally {
|
||||
if (starting)
|
||||
LoggingThreadLocal.stop();
|
||||
LoggingThreadLocal.log(physicalCard, "getKeywordCount");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.KEYWORD_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
|
||||
if (modifier.isKeywordRemoved(gameState, this, physicalCard, keyword))
|
||||
return 0;
|
||||
}
|
||||
|
||||
int result = physicalCard.getBlueprint().getKeywordCount(keyword);
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.KEYWORD_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, physicalCard, modifier)
|
||||
&& appliesKeywordModifier(gameState, modifier.getSource(), keyword))
|
||||
result += modifier.getKeywordCountModifier(gameState, this, physicalCard, keyword);
|
||||
}
|
||||
return Math.max(0, result);
|
||||
}
|
||||
|
||||
private boolean appliesKeywordModifier(GameState gameState, PhysicalCard modifierSource, Keyword keyword) {
|
||||
@@ -266,20 +254,14 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
|
||||
|
||||
@Override
|
||||
public int getStrength(GameState gameState, PhysicalCard physicalCard) {
|
||||
boolean starting = LoggingThreadLocal.isStarting();
|
||||
try {
|
||||
LoggingThreadLocal.log(physicalCard, "getStrength");
|
||||
int result = physicalCard.getBlueprint().getStrength();
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.STRENGTH_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, physicalCard, modifier)
|
||||
&& appliesStrengthModifier(gameState, modifier.getSource()))
|
||||
result += modifier.getStrengthModifier(gameState, this, physicalCard);
|
||||
}
|
||||
return Math.max(0, result);
|
||||
} finally {
|
||||
if (starting)
|
||||
LoggingThreadLocal.stop();
|
||||
LoggingThreadLocal.log(physicalCard, "getStrength");
|
||||
int result = physicalCard.getBlueprint().getStrength();
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.STRENGTH_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, physicalCard, modifier)
|
||||
&& appliesStrengthModifier(gameState, modifier.getSource()))
|
||||
result += modifier.getStrengthModifier(gameState, this, physicalCard);
|
||||
}
|
||||
return Math.max(0, result);
|
||||
}
|
||||
|
||||
private boolean appliesStrengthModifier(GameState gameState, PhysicalCard modifierSource) {
|
||||
@@ -295,262 +277,172 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
|
||||
|
||||
@Override
|
||||
public int getVitality(GameState gameState, PhysicalCard physicalCard) {
|
||||
boolean starting = LoggingThreadLocal.isStarting();
|
||||
try {
|
||||
LoggingThreadLocal.log(physicalCard, "getVitality");
|
||||
int result = physicalCard.getBlueprint().getVitality() - gameState.getWounds(physicalCard);
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.VITALITY_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
|
||||
result += modifier.getVitalityModifier(gameState, this, physicalCard);
|
||||
}
|
||||
return Math.max(0, result);
|
||||
} finally {
|
||||
if (starting)
|
||||
LoggingThreadLocal.stop();
|
||||
LoggingThreadLocal.log(physicalCard, "getVitality");
|
||||
int result = physicalCard.getBlueprint().getVitality() - gameState.getWounds(physicalCard);
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.VITALITY_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
|
||||
result += modifier.getVitalityModifier(gameState, this, physicalCard);
|
||||
}
|
||||
return Math.max(0, result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getResistance(GameState gameState, PhysicalCard physicalCard) {
|
||||
boolean starting = LoggingThreadLocal.isStarting();
|
||||
try {
|
||||
LoggingThreadLocal.log(physicalCard, "getResistance");
|
||||
int result = physicalCard.getBlueprint().getResistance() - gameState.getBurdens();
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.RESISTANCE_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
|
||||
result += modifier.getResistanceModifier(gameState, this, physicalCard);
|
||||
}
|
||||
return Math.max(0, result);
|
||||
} finally {
|
||||
if (starting)
|
||||
LoggingThreadLocal.stop();
|
||||
LoggingThreadLocal.log(physicalCard, "getResistance");
|
||||
int result = physicalCard.getBlueprint().getResistance() - gameState.getBurdens();
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.RESISTANCE_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
|
||||
result += modifier.getResistanceModifier(gameState, this, physicalCard);
|
||||
}
|
||||
return Math.max(0, result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMinionSiteNumber(GameState gameState, PhysicalCard physicalCard) {
|
||||
boolean starting = LoggingThreadLocal.isStarting();
|
||||
try {
|
||||
LoggingThreadLocal.log(physicalCard, "getMinionSiteNumber");
|
||||
int result = physicalCard.getBlueprint().getSiteNumber();
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.SITE_NUMBER_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
|
||||
result += modifier.getMinionSiteNumberModifier(gameState, this, physicalCard);
|
||||
}
|
||||
return Math.max(0, result);
|
||||
} finally {
|
||||
if (starting)
|
||||
LoggingThreadLocal.stop();
|
||||
LoggingThreadLocal.log(physicalCard, "getMinionSiteNumber");
|
||||
int result = physicalCard.getBlueprint().getSiteNumber();
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.SITE_NUMBER_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
|
||||
result += modifier.getMinionSiteNumberModifier(gameState, this, physicalCard);
|
||||
}
|
||||
return Math.max(0, result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTwilightCost(GameState gameState, PhysicalCard physicalCard, boolean ignoreRoamingPenalty) {
|
||||
boolean starting = LoggingThreadLocal.isStarting();
|
||||
try {
|
||||
LoggingThreadLocal.log(physicalCard, "getTwilightCost");
|
||||
int result = physicalCard.getBlueprint().getTwilightCost();
|
||||
result += physicalCard.getBlueprint().getTwilightCostModifier(gameState, this, physicalCard);
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.TWILIGHT_COST_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
|
||||
result += modifier.getTwilightCostModifier(gameState, this, physicalCard, ignoreRoamingPenalty);
|
||||
}
|
||||
return Math.max(0, result);
|
||||
} finally {
|
||||
if (starting)
|
||||
LoggingThreadLocal.stop();
|
||||
LoggingThreadLocal.log(physicalCard, "getTwilightCost");
|
||||
int result = physicalCard.getBlueprint().getTwilightCost();
|
||||
result += physicalCard.getBlueprint().getTwilightCostModifier(gameState, this, physicalCard);
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.TWILIGHT_COST_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
|
||||
result += modifier.getTwilightCostModifier(gameState, this, physicalCard, ignoreRoamingPenalty);
|
||||
}
|
||||
return Math.max(0, result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getPlayOnTwilightCost(GameState gameState, PhysicalCard physicalCard, PhysicalCard target) {
|
||||
boolean starting = LoggingThreadLocal.isStarting();
|
||||
try {
|
||||
LoggingThreadLocal.log(physicalCard, "getPlayOnTwilightCost");
|
||||
int result = getTwilightCost(gameState, physicalCard, false);
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.TWILIGHT_COST_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
|
||||
result += modifier.getPlayOnTwilightCostModifier(gameState, this, physicalCard, target);
|
||||
}
|
||||
return Math.max(0, result);
|
||||
} finally {
|
||||
if (starting)
|
||||
LoggingThreadLocal.stop();
|
||||
LoggingThreadLocal.log(physicalCard, "getPlayOnTwilightCost");
|
||||
int result = getTwilightCost(gameState, physicalCard, false);
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.TWILIGHT_COST_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
|
||||
result += modifier.getPlayOnTwilightCostModifier(gameState, this, physicalCard, target);
|
||||
}
|
||||
return Math.max(0, result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRoamingPenalty(GameState gameState, PhysicalCard physicalCard) {
|
||||
boolean starting = LoggingThreadLocal.isStarting();
|
||||
try {
|
||||
LoggingThreadLocal.log(physicalCard, "getRoamingPenalty");
|
||||
int result = 2;
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.TWILIGHT_COST_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
|
||||
result += modifier.getRoamingPenaltyModifier(gameState, this, physicalCard);
|
||||
}
|
||||
return Math.max(0, result);
|
||||
} finally {
|
||||
if (starting)
|
||||
LoggingThreadLocal.stop();
|
||||
LoggingThreadLocal.log(physicalCard, "getRoamingPenalty");
|
||||
int result = 2;
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.TWILIGHT_COST_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, physicalCard, modifier))
|
||||
result += modifier.getRoamingPenaltyModifier(gameState, this, physicalCard);
|
||||
}
|
||||
return Math.max(0, result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOverwhelmMultiplier(GameState gameState, PhysicalCard card) {
|
||||
boolean starting = LoggingThreadLocal.isStarting();
|
||||
try {
|
||||
LoggingThreadLocal.log(card, "getOverwhelmMultiplier");
|
||||
int overwhelmMultiplier = 2;
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.OVERWHELM_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
overwhelmMultiplier = Math.max(overwhelmMultiplier, modifier.getOverwhelmMultiplier(gameState, this, card));
|
||||
}
|
||||
return overwhelmMultiplier;
|
||||
} finally {
|
||||
if (starting)
|
||||
LoggingThreadLocal.stop();
|
||||
LoggingThreadLocal.log(card, "getOverwhelmMultiplier");
|
||||
int overwhelmMultiplier = 2;
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.OVERWHELM_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
overwhelmMultiplier = Math.max(overwhelmMultiplier, modifier.getOverwhelmMultiplier(gameState, this, card));
|
||||
}
|
||||
return overwhelmMultiplier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canTakeWound(GameState gameState, PhysicalCard card) {
|
||||
boolean starting = LoggingThreadLocal.isStarting();
|
||||
try {
|
||||
LoggingThreadLocal.log(card, "canTakeWound");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.WOUND_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier)) {
|
||||
Integer woundsTaken = _woundsPerPhaseMap.get(card.getCardId());
|
||||
if (woundsTaken == null)
|
||||
woundsTaken = 0;
|
||||
if (!modifier.canTakeWound(gameState, this, card, woundsTaken))
|
||||
return false;
|
||||
}
|
||||
LoggingThreadLocal.log(card, "canTakeWound");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.WOUND_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier)) {
|
||||
Integer woundsTaken = _woundsPerPhaseMap.get(card.getCardId());
|
||||
if (woundsTaken == null)
|
||||
woundsTaken = 0;
|
||||
if (!modifier.canTakeWound(gameState, this, card, woundsTaken))
|
||||
return false;
|
||||
}
|
||||
} finally {
|
||||
if (starting)
|
||||
LoggingThreadLocal.stop();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canTakeArcheryWound(GameState gameState, PhysicalCard card) {
|
||||
boolean starting = LoggingThreadLocal.isStarting();
|
||||
try {
|
||||
LoggingThreadLocal.log(card, "canTakeArcheryWound");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.WOUND_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier)) {
|
||||
if (!modifier.canTakeArcheryWound(gameState, this, card))
|
||||
return false;
|
||||
}
|
||||
LoggingThreadLocal.log(card, "canTakeArcheryWound");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.WOUND_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier)) {
|
||||
if (!modifier.canTakeArcheryWound(gameState, this, card))
|
||||
return false;
|
||||
}
|
||||
} finally {
|
||||
if (starting)
|
||||
LoggingThreadLocal.stop();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBeExerted(GameState gameState, PhysicalCard source, PhysicalCard card) {
|
||||
boolean starting = LoggingThreadLocal.isStarting();
|
||||
try {
|
||||
LoggingThreadLocal.log(card, "canBeExerted");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.WOUND_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
if (!modifier.canBeExerted(gameState, this, source, card))
|
||||
return false;
|
||||
}
|
||||
} finally {
|
||||
if (starting)
|
||||
LoggingThreadLocal.stop();
|
||||
LoggingThreadLocal.log(card, "canBeExerted");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.WOUND_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
if (!modifier.canBeExerted(gameState, this, source, card))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAllyAllowedToParticipateInArcheryFire(GameState gameState, PhysicalCard card) {
|
||||
boolean starting = LoggingThreadLocal.isStarting();
|
||||
try {
|
||||
LoggingThreadLocal.log(card, "isAllyAllowedToParticipateInArcheryFire");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.PRESENCE_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
if (modifier.isAllyParticipateInArcheryFire(gameState, this, card))
|
||||
return true;
|
||||
}
|
||||
} finally {
|
||||
if (starting)
|
||||
LoggingThreadLocal.stop();
|
||||
LoggingThreadLocal.log(card, "isAllyAllowedToParticipateInArcheryFire");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.PRESENCE_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
if (modifier.isAllyParticipateInArcheryFire(gameState, this, card))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAllowedToParticipateInSkirmishes(GameState gameState, Side sidePlayer, PhysicalCard card) {
|
||||
boolean starting = LoggingThreadLocal.isStarting();
|
||||
try {
|
||||
LoggingThreadLocal.log(card, "isAllowedToParticipateInSkirmished");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.PRESENCE_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
if (modifier.isParticipateInSkirmishes(gameState, sidePlayer, this, card))
|
||||
return true;
|
||||
}
|
||||
} finally {
|
||||
if (starting)
|
||||
LoggingThreadLocal.stop();
|
||||
LoggingThreadLocal.log(card, "isAllowedToParticipateInSkirmished");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.PRESENCE_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
if (modifier.isParticipateInSkirmishes(gameState, sidePlayer, this, card))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAllyPreventedFromParticipatingInArcheryFire(GameState gameState, PhysicalCard card) {
|
||||
boolean starting = LoggingThreadLocal.isStarting();
|
||||
try {
|
||||
LoggingThreadLocal.log(card, "isAllyPreventedFromParticipatingInArcheryFire");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.PRESENCE_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
if (modifier.isAllyPreventedFromParticipatingInArcheryFire(gameState, this, card))
|
||||
return true;
|
||||
}
|
||||
} finally {
|
||||
if (starting)
|
||||
LoggingThreadLocal.stop();
|
||||
LoggingThreadLocal.log(card, "isAllyPreventedFromParticipatingInArcheryFire");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.PRESENCE_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
if (modifier.isAllyPreventedFromParticipatingInArcheryFire(gameState, this, card))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAllyPreventedFromParticipatingInSkirmishes(GameState gameState, Side sidePlayer, PhysicalCard card) {
|
||||
boolean starting = LoggingThreadLocal.isStarting();
|
||||
try {
|
||||
LoggingThreadLocal.log(card, "isAllyPreventedFromParticipatingInSkirmishes");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.PRESENCE_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
if (modifier.isAllyPreventedFromParticipatingInSkirmishes(gameState, sidePlayer, this, card))
|
||||
return true;
|
||||
}
|
||||
} finally {
|
||||
if (starting)
|
||||
LoggingThreadLocal.stop();
|
||||
LoggingThreadLocal.log(card, "isAllyPreventedFromParticipatingInSkirmishes");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.PRESENCE_MODIFIER)) {
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
if (modifier.isAllyPreventedFromParticipatingInSkirmishes(gameState, sidePlayer, this, card))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addsToArcheryTotal(GameState gameState, PhysicalCard card) {
|
||||
boolean starting = LoggingThreadLocal.isStarting();
|
||||
try {
|
||||
LoggingThreadLocal.log(card, "addsToArcheryTotal");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.ARCHERY_MODIFIER))
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
if (!modifier.addsToArcheryTotal(gameState, this, card))
|
||||
return false;
|
||||
LoggingThreadLocal.log(card, "addsToArcheryTotal");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.ARCHERY_MODIFIER))
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
if (!modifier.addsToArcheryTotal(gameState, this, card))
|
||||
return false;
|
||||
|
||||
} finally {
|
||||
if (starting)
|
||||
LoggingThreadLocal.stop();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -620,49 +512,31 @@ public class ModifiersLogic implements ModifiersEnvironment, ModifiersQuerying {
|
||||
|
||||
@Override
|
||||
public boolean canBeAssignedToSkirmish(GameState gameState, Side sidePlayer, PhysicalCard card) {
|
||||
boolean starting = LoggingThreadLocal.isStarting();
|
||||
try {
|
||||
LoggingThreadLocal.log(card, "canBeAssignedToSkirmish");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.ASSIGNMENT_MODIFIER))
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
if (!modifier.canBeAssignedToSkirmish(gameState, sidePlayer, this, card))
|
||||
return false;
|
||||
} finally {
|
||||
if (starting)
|
||||
LoggingThreadLocal.stop();
|
||||
}
|
||||
LoggingThreadLocal.log(card, "canBeAssignedToSkirmish");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.ASSIGNMENT_MODIFIER))
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
if (!modifier.canBeAssignedToSkirmish(gameState, sidePlayer, this, card))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBeDiscardedFromPlay(GameState gameState, PhysicalCard card, PhysicalCard source) {
|
||||
boolean starting = LoggingThreadLocal.isStarting();
|
||||
try {
|
||||
LoggingThreadLocal.log(card, "canBeDiscardedFromPlay");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.DISCARD_FROM_PLAY_MODIFIER))
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
if (!modifier.canBeDiscardedFromPlay(gameState, this, card, source))
|
||||
return false;
|
||||
} finally {
|
||||
if (starting)
|
||||
LoggingThreadLocal.stop();
|
||||
}
|
||||
LoggingThreadLocal.log(card, "canBeDiscardedFromPlay");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.DISCARD_FROM_PLAY_MODIFIER))
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
if (!modifier.canBeDiscardedFromPlay(gameState, this, card, source))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBeHealed(GameState gameState, PhysicalCard card) {
|
||||
boolean starting = LoggingThreadLocal.isStarting();
|
||||
try {
|
||||
LoggingThreadLocal.log(card, "canBeHealed");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.WOUND_MODIFIER))
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
if (!modifier.canBeHealed(gameState, this, card))
|
||||
return false;
|
||||
} finally {
|
||||
if (starting)
|
||||
LoggingThreadLocal.stop();
|
||||
}
|
||||
LoggingThreadLocal.log(card, "canBeHealed");
|
||||
for (Modifier modifier : getModifiers(gameState, ModifierEffect.WOUND_MODIFIER))
|
||||
if (affectsCardWithSkipSet(gameState, card, modifier))
|
||||
if (!modifier.canBeHealed(gameState, this, card))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ import com.gempukku.lotro.hall.HallException;
|
||||
import com.gempukku.lotro.hall.HallInfoVisitor;
|
||||
import com.gempukku.lotro.hall.HallServer;
|
||||
import com.gempukku.lotro.league.LeagueService;
|
||||
import com.gempukku.lotro.logic.modifiers.LoggingThreadLocal;
|
||||
import com.gempukku.lotro.logic.vo.LotroDeck;
|
||||
import com.sun.jersey.spi.resource.Singleton;
|
||||
import org.apache.commons.lang.StringEscapeUtils;
|
||||
@@ -279,36 +280,35 @@ public class ServerResource {
|
||||
if (!_test)
|
||||
participantId = getLoggedUser(request);
|
||||
|
||||
long start = System.currentTimeMillis();
|
||||
LoggingThreadLocal.start();
|
||||
try {
|
||||
LotroGameMediator gameMediator = _lotroServer.getGameById(gameId);
|
||||
if (gameMediator == null)
|
||||
sendError(Response.Status.NOT_FOUND);
|
||||
|
||||
LotroGameMediator gameMediator = _lotroServer.getGameById(gameId);
|
||||
if (gameMediator == null)
|
||||
sendError(Response.Status.NOT_FOUND);
|
||||
|
||||
if (decisionId != null) {
|
||||
try {
|
||||
gameMediator.playerAnswered(participantId, decisionId, decisionValue);
|
||||
} catch (RuntimeException exp) {
|
||||
_logger.error("Error while sending decision", exp);
|
||||
throw exp;
|
||||
if (decisionId != null) {
|
||||
try {
|
||||
gameMediator.playerAnswered(participantId, decisionId, decisionValue);
|
||||
} catch (RuntimeException exp) {
|
||||
_logger.error("Error while sending decision", exp);
|
||||
throw exp;
|
||||
}
|
||||
}
|
||||
|
||||
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
|
||||
|
||||
Document doc = documentBuilder.newDocument();
|
||||
Element update = doc.createElement("update");
|
||||
|
||||
gameMediator.processCommunicationChannel(participantId, new SerializationVisitor(doc, update));
|
||||
|
||||
doc.appendChild(update);
|
||||
|
||||
return doc;
|
||||
} finally {
|
||||
LoggingThreadLocal.stop(decisionId != null);
|
||||
}
|
||||
|
||||
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
|
||||
|
||||
Document doc = documentBuilder.newDocument();
|
||||
Element update = doc.createElement("update");
|
||||
|
||||
gameMediator.processCommunicationChannel(participantId, new SerializationVisitor(doc, update));
|
||||
|
||||
doc.appendChild(update);
|
||||
|
||||
long time = System.currentTimeMillis() - start;
|
||||
if (time > 100)
|
||||
_logger.debug("Processing time: " + time);
|
||||
|
||||
return doc;
|
||||
}
|
||||
|
||||
@Path("/deck/list")
|
||||
|
||||
Reference in New Issue
Block a user