Some changes to logged data and a NPE prevention.

This commit is contained in:
LevelX2 2016-04-14 08:28:28 +02:00
parent 3e4c9dc645
commit 41ba4c9540
3 changed files with 19 additions and 14 deletions

View file

@ -24,8 +24,7 @@
* The views and conclusions contained in the software and documentation are those of the * The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed * authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com. * or implied, of BetaSteward_at_googlemail.com.
*/ */
package mage.server; package mage.server;
import java.text.DateFormat; import java.text.DateFormat;
@ -73,16 +72,16 @@ public class ChatSession {
public void kill(UUID userId, DisconnectReason reason) { public void kill(UUID userId, DisconnectReason reason) {
try { try {
if (reason == null) { if (reason == null) {
logger.fatal("User kill without disconnect reason userId: " + userId); logger.fatal("User kill without disconnect reason userId: " + userId);
reason = DisconnectReason.Undefined; reason = DisconnectReason.Undefined;
} }
if (reason != null && userId != null && clients.containsKey(userId)) { if (reason != null && userId != null && clients.containsKey(userId)) {
String userName = clients.get(userId); String userName = clients.get(userId);
if (!reason.equals(DisconnectReason.LostConnection)) { // for lost connection the user will be reconnected or session expire so no remove of chat yet if (!reason.equals(DisconnectReason.LostConnection)) { // for lost connection the user will be reconnected or session expire so no remove of chat yet
clients.remove(userId); clients.remove(userId);
logger.debug(userName + "(" + reason.toString() + ")" + " removed from chatId " + chatId); logger.debug(userName + "(" + reason.toString() + ")" + " removed from chatId " + chatId);
} }
String message; String message;
switch (reason) { switch (reason) {
@ -126,7 +125,7 @@ public class ChatSession {
public boolean broadcastWhisperToUser(User fromUser, User toUser, String message) { public boolean broadcastWhisperToUser(User fromUser, User toUser, String message) {
if (clients.containsKey(toUser.getId())) { if (clients.containsKey(toUser.getId())) {
toUser.fireCallback(new ClientCallback("chatMessage", chatId, toUser.fireCallback(new ClientCallback("chatMessage", chatId,
new ChatMessage(new StringBuilder("Whisper from ").append(fromUser.getName()).toString(), message, timeFormatter.format(new Date()), MessageColor.YELLOW, MessageType.WHISPER, SoundToPlay.PlayerWhispered))); new ChatMessage(new StringBuilder("Whisper from ").append(fromUser.getName()).toString(), message, timeFormatter.format(new Date()), MessageColor.YELLOW, MessageType.WHISPER, SoundToPlay.PlayerWhispered)));
if (clients.containsKey(fromUser.getId())) { if (clients.containsKey(fromUser.getId())) {
fromUser.fireCallback(new ClientCallback("chatMessage", chatId, fromUser.fireCallback(new ClientCallback("chatMessage", chatId,
@ -153,22 +152,22 @@ public class ChatSession {
if (!message.isEmpty()) { if (!message.isEmpty()) {
boolean remove = false; boolean remove = false;
final String msg = message; final String msg = message;
final String time = (withTime ? timeFormatter.format(new Date()):""); final String time = (withTime ? timeFormatter.format(new Date()) : "");
final String username = userName; final String username = userName;
logger.trace("Broadcasting '" + msg + "' for " + chatId); logger.trace("Broadcasting '" + msg + "' for " + chatId);
for (UUID userId: clients.keySet()) { for (UUID userId : clients.keySet()) {
User user = UserManager.getInstance().getUser(userId); User user = UserManager.getInstance().getUser(userId);
if (user != null) { if (user != null) {
user.fireCallback(new ClientCallback("chatMessage", chatId, new ChatMessage(username, msg, time, color, messageType, soundToPlay))); user.fireCallback(new ClientCallback("chatMessage", chatId, new ChatMessage(username, msg, time, color, messageType, soundToPlay)));
} } else {
else { // Happens when a user post to a chat while other users left chat at nearly the same time
logger.error("User not found but connected to chat - userId: " + userId + " chatId: " + chatId); logger.trace("User not found but connected to chat - userId: " + userId + " chatId: " + chatId);
clientsToRemove.add(userId); clientsToRemove.add(userId);
remove = true; remove = true;
} }
} }
if (remove) { if (remove) {
for (UUID userIdToRemove: clientsToRemove) { for (UUID userIdToRemove : clientsToRemove) {
clients.remove(userIdToRemove); clients.remove(userIdToRemove);
} }
clientsToRemove.clear(); clientsToRemove.clear();
@ -198,5 +197,5 @@ public class ChatSession {
public String getInfo() { public String getInfo() {
return info; return info;
} }
} }

View file

@ -1159,6 +1159,9 @@ public abstract class AbilityImpl implements Ability {
public MageObject getSourceObject(Game game) { public MageObject getSourceObject(Game game) {
if (sourceObject == null) { if (sourceObject == null) {
setSourceObject(null, game); setSourceObject(null, game);
if (sourceObject == null) {
logger.warn("Source object could not be retrieved: " + this.getRule());
}
} }
return sourceObject; return sourceObject;
} }

View file

@ -106,7 +106,10 @@ public class ManaPoolItem implements Serializable {
} }
public UUID getSourceId() { public UUID getSourceId() {
return sourceObject.getId(); if (sourceObject != null) {
return sourceObject.getId();
}
return null;
} }
public UUID getOriginalId() { public UUID getOriginalId() {