Sending user data. Sending avatar to server on connect.

This commit is contained in:
magenoxx 2011-09-07 21:18:58 +04:00
parent 32d4d854f4
commit bf1a49dd0b
27 changed files with 202 additions and 38 deletions

View file

@ -54,13 +54,8 @@ import mage.server.util.ServerMessagesUtil;
import mage.server.util.ThreadExecutor;
import mage.utils.CompressUtil;
import mage.utils.MageVersion;
import mage.view.*;
import mage.view.ChatMessage.MessageColor;
import mage.view.DraftPickView;
import mage.view.GameView;
import mage.view.MatchView;
import mage.view.TableView;
import mage.view.TournamentView;
import mage.view.UserView;
import org.apache.log4j.Logger;
/**
@ -83,7 +78,6 @@ public class MageServerImpl implements MageServer {
@Override
public boolean registerClient(String userName, String sessionId, MageVersion version) throws MageException {
try {
if (version.compareTo(Main.getVersion()) != 0)
throw new MageVersionException(version, Main.getVersion());
@ -95,7 +89,17 @@ public class MageServerImpl implements MageServer {
}
return false;
}
@Override
public boolean setUserData(String userName, String sessionId, UserDataView userDataView) throws MageException {
try {
return SessionManager.getInstance().setUserData(userName, sessionId, userDataView);
} catch (Exception ex) {
handleException(ex);
}
return false;
}
@Override
public boolean registerAdmin(String password, String sessionId, MageVersion version) throws MageException {
try {

View file

@ -32,6 +32,9 @@ import java.util.Date;
import java.util.UUID;
import mage.MageException;
import mage.interfaces.callback.ClientCallback;
import mage.players.net.UserData;
import mage.players.net.UserGroup;
import mage.view.UserDataView;
import org.apache.log4j.Logger;
import org.jboss.remoting.callback.AsynchInvokerCallbackHandler;
import org.jboss.remoting.callback.Callback;
@ -86,8 +89,32 @@ public class Session {
public void registerAdmin() {
this.isAdmin = true;
User user = UserManager.getInstance().createUser("Admin", host);
user.setUserData(new UserData(UserGroup.ADMIN, 0));
this.userId = user.getId();
}
public boolean setUserData(String userName, UserDataView userDataView) {
User user = UserManager.getInstance().findUser(userName);
if (user != null) {
UserData userData = new UserData(UserGroup.PLAYER, userDataView.getAvatarId());
updateAvatar(userName, userData);
user.setUserData(userData);
return true;
}
return false;
}
private void updateAvatar(String userName, UserData userData) {
//TODO: move to separate class
//TODO: add for checking for private key
if (userName.equals("nantuko")) {
userData.setAvatarId(1000);
} else if (userName.equals("i_no_k")) {
userData.setAvatarId(1002);
} else if (userName.equals("Askael")) {
userData.setAvatarId(1003);
}
}
public String getId() {
return sessionId;

View file

@ -30,9 +30,11 @@ package mage.server;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import mage.MageException;
import mage.players.net.UserData;
import mage.players.net.UserGroup;
import mage.view.UserDataView;
import org.apache.log4j.Logger;
import org.jboss.remoting.callback.InvokerCallbackHandler;
@ -80,6 +82,15 @@ public class SessionManager {
}
return false;
}
public boolean setUserData(String userName, String sessionId, UserDataView userDataView) throws MageException {
Session session = sessions.get(sessionId);
if (session != null) {
session.setUserData(userName, userDataView);
return true;
}
return false;
}
public synchronized void disconnect(String sessionId, boolean voluntary) {
Session session = sessions.get(sessionId);

View file

@ -27,16 +27,15 @@
*/
package mage.server;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.UUID;
import mage.cards.decks.Deck;
import mage.game.Table;
import mage.interfaces.callback.ClientCallback;
import mage.players.net.UserData;
import mage.server.draft.DraftSession;
import mage.server.game.GameManager;
import mage.server.game.GameSession;
@ -66,6 +65,8 @@ public class User {
private Map<UUID, TournamentSession> tournamentSessions = new HashMap<UUID, TournamentSession>();
private Map<UUID, TournamentSession> constructing = new HashMap<UUID, TournamentSession>();
private Map<UUID, Deck> sideboarding = new HashMap<UUID, Deck>();
private UserData userData;
public User(String userName, String host) {
this.userName = userName;
@ -263,4 +264,12 @@ public class User {
}
}
public void setUserData(UserData userData) {
this.userData = userData;
}
public UserData getUserData() {
return this.userData;
}
}

View file

@ -29,12 +29,13 @@ package mage.server;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
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;
/**

View file

@ -31,7 +31,7 @@ package mage.server.game;
import java.io.BufferedOutputStream;
import mage.MageException;
import mage.server.TableManager;
import mage.server.*;
import java.io.FileOutputStream;
import java.io.IOException;
@ -59,9 +59,6 @@ import mage.game.events.PlayerQueryEvent;
import mage.game.events.TableEvent;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.server.ChatManager;
import mage.server.Main;
import mage.server.UserManager;
import mage.server.util.SystemUtil;
import mage.server.util.Splitter;
import mage.server.util.ThreadExecutor;
@ -190,7 +187,9 @@ public class GameController implements GameCallback {
UUID playerId = userPlayerMap.get(userId);
GameSession gameSession = new GameSession(game, userId, playerId);
gameSessions.put(playerId, gameSession);
UserManager.getInstance().getUser(userId).addGame(playerId, gameSession);
User user = UserManager.getInstance().getUser(userId);
gameSession.setUserData(user.getUserData());
user.addGame(playerId, gameSession);
logger.info("player " + playerId + " has joined game " + game.getId());
ChatManager.getInstance().broadcast(chatId, "", game.getPlayer(playerId).getName() + " has joined the game", MessageColor.BLACK);
checkStart();

View file

@ -38,6 +38,7 @@ import mage.cards.Cards;
import mage.game.Game;
import mage.interfaces.callback.ClientCallback;
import mage.players.Player;
import mage.players.net.UserData;
import mage.server.User;
import mage.server.UserManager;
import mage.server.util.ConfigSettings;
@ -60,6 +61,8 @@ public class GameSession extends GameWatcher {
private ScheduledFuture<?> futureTimeout;
protected static ScheduledExecutorService timeoutExecutor = ThreadExecutor.getInstance().getTimeoutExecutor();
private UserData userData;
public GameSession(Game game, UUID userId, UUID playerId) {
super(userId, game);
this.playerId = playerId;
@ -196,6 +199,7 @@ public class GameSession extends GameWatcher {
@Override
public GameView getGameView() {
Player player = game.getPlayer(playerId);
player.setUserData(this.userData);
GameView gameView = new GameView(game.getState(), game);
gameView.setHand(new SimpleCardsView(player.getHand().getCards(game)));
@ -234,4 +238,7 @@ public class GameSession extends GameWatcher {
game.quit(playerId);
}
public void setUserData(UserData userData) {
this.userData = userData;
}
}