fixed client not disconnected if error occurred during callback

This commit is contained in:
BetaSteward 2011-09-11 22:19:26 -04:00
parent a3d1de7850
commit 2c5463d5eb
4 changed files with 21 additions and 7 deletions

View file

@ -131,10 +131,12 @@ public class Session {
}
public void disconnect() {
logger.info("session disconnected for user " + userId);
UserManager.getInstance().disconnect(userId);
}
public void kill() {
logger.info("session killed for user " + userId);
UserManager.getInstance().removeUser(userId);
}

View file

@ -67,7 +67,7 @@ public class SessionManager {
Session session = sessions.get(sessionId);
if (session != null) {
session.registerUser(userName);
logger.info("User " + userName + " connected from " + session.getHost());
logger.info("User " + userName + " connected from " + session.getHost() + " sessionId: " + sessionId);
return true;
}
return false;
@ -94,13 +94,16 @@ public class SessionManager {
public synchronized void disconnect(String sessionId, boolean voluntary) {
Session session = sessions.get(sessionId);
sessions.remove(sessionId);
if (session != null) {
if (voluntary)
session.kill();
else
session.disconnect();
sessions.remove(sessionId);
}
else {
logger.info("could not find session with id " + sessionId);
}
}
public Map<String, Session> getSessions() {

View file

@ -41,6 +41,7 @@ import mage.server.game.GameManager;
import mage.server.game.GameSession;
import mage.server.tournament.TournamentSession;
import mage.view.TableClientMessage;
import org.apache.log4j.Logger;
/**
*
@ -48,7 +49,9 @@ import mage.view.TableClientMessage;
*/
public class User {
public enum UserState {
private final static Logger logger = Logger.getLogger(User.class);
public enum UserState {
Created, Connected, Disconnected, Reconnected;
}
@ -92,13 +95,16 @@ public class User {
public void setSessionId(String sessionId) {
this.sessionId = sessionId;
if (sessionId.isEmpty())
if (sessionId.isEmpty()) {
userState = UserState.Disconnected;
else if (userState == UserState.Created)
logger.info("User " + userName + " disconnected");
} else if (userState == UserState.Created) {
userState = UserState.Connected;
else {
logger.info("User " + userName + " created");
} else {
userState = UserState.Reconnected;
reconnect();
logger.info("User " + userName + " reconnected");
}
}

View file

@ -35,8 +35,8 @@ import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import mage.players.net.UserData;
import mage.view.ChatMessage.MessageColor;
import org.apache.log4j.Logger;
/**
*
@ -50,6 +50,7 @@ public class UserManager {
protected static ScheduledExecutorService expireExecutor = Executors.newSingleThreadScheduledExecutor();
private final static UserManager INSTANCE = new UserManager();
private final static Logger logger = Logger.getLogger(UserManager.class);
public static UserManager getInstance() {
return INSTANCE;
@ -100,6 +101,7 @@ public class UserManager {
public void disconnect(UUID userId) {
if (users.containsKey(userId)) {
logger.info("user disconnected " + userId);
users.get(userId).setSessionId("");
ChatManager.getInstance().broadcast(userId, "has lost connection", MessageColor.BLACK);
}
@ -114,6 +116,7 @@ public class UserManager {
public void removeUser(UUID userId) {
if (users.containsKey(userId)) {
logger.info("user removed" + userId);
users.get(userId).setSessionId("");
ChatManager.getInstance().broadcast(userId, "has disconnected", MessageColor.BLACK);
users.get(userId).kill();