mirror of
https://github.com/magefree/mage.git
synced 2025-12-23 20:11:59 -08:00
fixed client not disconnected if error occurred during callback
This commit is contained in:
parent
a3d1de7850
commit
2c5463d5eb
4 changed files with 21 additions and 7 deletions
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue