Handled null pointer exception for "info about player not joined yet"

This commit is contained in:
LevelX2 2015-09-27 23:36:46 +02:00
parent f4108f4e72
commit 368858cc95

View file

@ -157,64 +157,64 @@ public class GameController implements GameCallback {
private void init() { private void init() {
game.addTableEventListener( game.addTableEventListener(
new Listener<TableEvent> () { new Listener<TableEvent>() {
@Override @Override
public void event(TableEvent event) { public void event(TableEvent event) {
try { try {
PriorityTimer timer; PriorityTimer timer;
UUID playerId; UUID playerId;
switch (event.getEventType()) { switch (event.getEventType()) {
case UPDATE: case UPDATE:
updateGame(); updateGame();
break; break;
case INFO: case INFO:
ChatManager.getInstance().inform(chatId, event.getMessage(), MessageColor.BLACK, true, ChatMessage.MessageType.GAME); ChatManager.getInstance().inform(chatId, event.getMessage(), MessageColor.BLACK, true, ChatMessage.MessageType.GAME);
logger.trace(game.getId() + " " + event.getMessage()); logger.trace(game.getId() + " " + event.getMessage());
break; break;
case STATUS: case STATUS:
ChatManager.getInstance().inform(chatId, event.getMessage(), MessageColor.ORANGE, event.getWithTime(), ChatMessage.MessageType.GAME); ChatManager.getInstance().inform(chatId, event.getMessage(), MessageColor.ORANGE, event.getWithTime(), ChatMessage.MessageType.GAME);
logger.trace(game.getId() + " " + event.getMessage()); logger.trace(game.getId() + " " + event.getMessage());
break; break;
case ERROR: case ERROR:
error(event.getMessage(), event.getException()); error(event.getMessage(), event.getException());
break; break;
case END_GAME_INFO: case END_GAME_INFO:
endGameInfo(); endGameInfo();
break; break;
case INIT_TIMER: case INIT_TIMER:
final UUID initPlayerId = event.getPlayerId(); final UUID initPlayerId = event.getPlayerId();
if (initPlayerId == null) { if (initPlayerId == null) {
throw new MageException("INIT_TIMER: playerId can't be null"); throw new MageException("INIT_TIMER: playerId can't be null");
}
createPlayerTimer(event.getPlayerId(), game.getPriorityTime());
break;
case RESUME_TIMER:
playerId = event.getPlayerId();
if (playerId == null) {
throw new MageException("RESUME_TIMER: playerId can't be null");
}
timer = timers.get(playerId);
if (timer == null) {
Player player = game.getState().getPlayer(playerId);
if (player != null) {
timer = createPlayerTimer(event.getPlayerId(), player.getPriorityTimeLeft());
} else {
throw new MageException("RESUME_TIMER: player can't be null");
} }
} createPlayerTimer(event.getPlayerId(), game.getPriorityTime());
timer.resume(); break;
break; case RESUME_TIMER:
case PAUSE_TIMER: playerId = event.getPlayerId();
playerId = event.getPlayerId(); if (playerId == null) {
if (playerId == null) { throw new MageException("RESUME_TIMER: playerId can't be null");
throw new MageException("PAUSE_TIMER: playerId can't be null"); }
} timer = timers.get(playerId);
timer = timers.get(playerId); if (timer == null) {
if (timer == null) { Player player = game.getState().getPlayer(playerId);
throw new MageException("PAUSE_TIMER: couldn't find timer for player: " + playerId); if (player != null) {
} timer = createPlayerTimer(event.getPlayerId(), player.getPriorityTimeLeft());
timer.pause(); } else {
break; throw new MageException("RESUME_TIMER: player can't be null");
}
}
timer.resume();
break;
case PAUSE_TIMER:
playerId = event.getPlayerId();
if (playerId == null) {
throw new MageException("PAUSE_TIMER: playerId can't be null");
}
timer = timers.get(playerId);
if (timer == null) {
throw new MageException("PAUSE_TIMER: couldn't find timer for player: " + playerId);
}
timer.pause();
break;
} }
} catch (MageException ex) { } catch (MageException ex) {
logger.fatal("Table event listener error ", ex); logger.fatal("Table event listener error ", ex);
@ -375,7 +375,11 @@ public class GameController implements GameCallback {
logger.debug("Player " + player.getName() + " (disconnected) has joined gameId: " + game.getId()); logger.debug("Player " + player.getName() + " (disconnected) has joined gameId: " + game.getId());
} }
Session session = SessionManager.getInstance().getSession(user.getSessionId()); Session session = SessionManager.getInstance().getSession(user.getSessionId());
ChatManager.getInstance().broadcast(chatId, user, session.getPingInfo() + " is pending to join the game", MessageColor.BLUE, true, ChatMessage.MessageType.STATUS); if (session != null) {
ChatManager.getInstance().broadcast(chatId, user, session.getPingInfo() + " is pending to join the game", MessageColor.BLUE, true, ChatMessage.MessageType.STATUS);
} else {
logger.debug("Player " + player.getName() + " - not possible to get session gameId: " + game.getId());
}
if (user.getSecondsDisconnected() > 240) { if (user.getSecondsDisconnected() > 240) {
// Cancel player join possibility lately after 4 minutes // Cancel player join possibility lately after 4 minutes
logger.debug("Player " + player.getName() + " - canceled game (after 240 seconds) gameId: " + game.getId()); logger.debug("Player " + player.getName() + " - canceled game (after 240 seconds) gameId: " + game.getId());
@ -407,12 +411,12 @@ public class GameController implements GameCallback {
if (allJoined()) { if (allJoined()) {
joinWaitingExecutor.shutdownNow(); joinWaitingExecutor.shutdownNow();
ThreadExecutor.getInstance().getCallExecutor().execute( ThreadExecutor.getInstance().getCallExecutor().execute(
new Runnable() { new Runnable() {
@Override @Override
public void run() { public void run() {
startGame(); startGame();
} }
}); });
} }
} }
@ -1072,13 +1076,13 @@ public class GameController implements GameCallback {
} }
cancelTimeout(); cancelTimeout();
futureTimeout = timeoutIdleExecutor.schedule(new Runnable() { futureTimeout = timeoutIdleExecutor.schedule(new Runnable() {
@Override @Override
public void run() { public void run() {
idleTimeout(playerId); idleTimeout(playerId);
} }
}, },
ServerMain.getInstance().isTestMode() ? 3600 :ConfigSettings.getInstance().getMaxSecondsIdle(), ServerMain.getInstance().isTestMode() ? 3600 : ConfigSettings.getInstance().getMaxSecondsIdle(),
TimeUnit.SECONDS TimeUnit.SECONDS
); );
} }