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

@ -209,4 +209,14 @@ public class HoverButton extends JPanel implements MouseListener {
public void drawSet() { public void drawSet() {
this.drawSet = true; this.drawSet = true;
} }
public void update(String text, Image image, Image hover, Image selected, Image disabled, Rectangle size) {
this.image = image;
this.hoverImage = hover;
this.selectedImage = selected;
this.disabledImage = disabled;
this.imageSize = size;
this.text = text;
repaint();
}
} }

View file

@ -94,6 +94,8 @@ public class PlayerPanelExt extends javax.swing.JPanel {
private static final Dimension topCardDimension = new Dimension(40, 56); private static final Dimension topCardDimension = new Dimension(40, 56);
private int avatarId = -1;
/** Creates new form PlayerPanel */ /** Creates new form PlayerPanel */
public PlayerPanelExt(boolean me) { public PlayerPanelExt(boolean me) {
initComponents(me); initComponents(me);
@ -115,6 +117,23 @@ public class PlayerPanelExt extends javax.swing.JPanel {
libraryLabel.setText(Integer.toString(player.getLibraryCount())); libraryLabel.setText(Integer.toString(player.getLibraryCount()));
graveLabel.setText(Integer.toString(player.getGraveyard().size())); graveLabel.setText(Integer.toString(player.getGraveyard().size()));
if (avatarId == -1) {
avatarId = player.getUserData().getAvatarId();
if (avatarId > 0) {
String path = "/avatars/" + String.valueOf(avatarId) + ".jpg";
if (avatarId == 64) {
path = "/avatars/i64.jpg";
} else if (avatarId >= 1000) {
avatarId = avatarId-1000;
path = "/avatars/special/" + String.valueOf(avatarId) + ".gif";
}
Image image = ImageHelper.getImageFromResources(path);
Rectangle r = new Rectangle(80, 80);
BufferedImage resized = ImageHelper.getResizedImage(BufferedImageBuilder.bufferImage(image, BufferedImage.TYPE_INT_ARGB), r);
this.avatar.update("player", resized, resized, resized, resized, r);
}
}
this.avatar.setText(player.getName()); this.avatar.setText(player.getName());
if (player.isActive()) { if (player.isActive()) {
this.avatar.setBorder(greenBorder); this.avatar.setBorder(greenBorder);
@ -175,12 +194,7 @@ public class PlayerPanelExt extends javax.swing.JPanel {
add(panelBackground); add(panelBackground);
Rectangle r = new Rectangle(80, 80); Rectangle r = new Rectangle(80, 80);
Random rand = new Random(); Image image = ImageHelper.getImageFromResources("/avatars/51.jpg");
Integer index = me ? 51 : rand.nextInt(AVATAR_COUNT) + 1;
if (index == 64 || index == 65) {
index += 2;
}
Image image = ImageHelper.getImageFromResources("/avatars/face" + index + ".jpg");
topCardPanel = Plugins.getInstance().getMageCard(new CardView(Sets.findCard("Forest")), bigCard, topCardDimension, gameId, true); topCardPanel = Plugins.getInstance().getMageCard(new CardView(Sets.findCard("Forest")), bigCard, topCardDimension, gameId, true);
topCardPanel.setVisible(false); topCardPanel.setVisible(false);

View file

@ -36,12 +36,7 @@ import mage.cards.decks.DeckCardLists;
import mage.game.GameException; import mage.game.GameException;
import mage.game.tournament.TournamentOptions; import mage.game.tournament.TournamentOptions;
import mage.utils.MageVersion; import mage.utils.MageVersion;
import mage.view.DraftPickView; import mage.view.*;
import mage.view.TableView;
import mage.view.GameView;
import mage.view.MatchView;
import mage.view.TournamentView;
import mage.view.UserView;
/** /**
* *
@ -53,6 +48,7 @@ public interface MageServer {
public boolean registerAdmin(String password, String sessionId, MageVersion version) throws MageException; public boolean registerAdmin(String password, String sessionId, MageVersion version) throws MageException;
public void deregisterClient(String sessionId) throws MageException; public void deregisterClient(String sessionId) throws MageException;
public boolean setUserData(String userName, String sessionId, UserDataView userDataView) throws MageException;
public ServerState getServerState() throws MageException; public ServerState getServerState() throws MageException;
//table methods //table methods

View file

@ -47,13 +47,7 @@ import mage.interfaces.MageServer;
import mage.interfaces.ServerState; import mage.interfaces.ServerState;
import mage.interfaces.callback.ClientCallback; import mage.interfaces.callback.ClientCallback;
import mage.utils.CompressUtil; import mage.utils.CompressUtil;
import mage.view.DraftPickView; import mage.view.*;
import mage.view.GameTypeView;
import mage.view.MatchView;
import mage.view.TableView;
import mage.view.TournamentTypeView;
import mage.view.TournamentView;
import mage.view.UserView;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.jboss.remoting.Client; import org.jboss.remoting.Client;
import org.jboss.remoting.ConnectionListener; import org.jboss.remoting.ConnectionListener;
@ -153,10 +147,14 @@ public class Session {
this.sessionId = callbackClient.getSessionId(); this.sessionId = callbackClient.getSessionId();
boolean registerResult = false; boolean registerResult = false;
if (connection.getPassword() == null) if (connection.getPassword() == null) {
UserDataView userDataView = new UserDataView(0);
// for backward compatibility. don't remove twice call - first one does nothing but for version checking
registerResult = server.registerClient(connection.getUsername(), sessionId, client.getVersion()); registerResult = server.registerClient(connection.getUsername(), sessionId, client.getVersion());
else server.setUserData(connection.getUsername(), sessionId, userDataView);
} else {
registerResult = server.registerAdmin(connection.getPassword(), sessionId, client.getVersion()); registerResult = server.registerAdmin(connection.getPassword(), sessionId, client.getVersion());
}
if (registerResult) { if (registerResult) {
sessionState = SessionState.CONNECTED; sessionState = SessionState.CONNECTED;
serverState = server.getServerState(); serverState = server.getServerState();

View file

@ -58,6 +58,7 @@ public class PlayerView implements Serializable {
private SimpleCardsView graveyard = new SimpleCardsView(); private SimpleCardsView graveyard = new SimpleCardsView();
private Map<UUID, PermanentView> battlefield = new HashMap<UUID, PermanentView>(); private Map<UUID, PermanentView> battlefield = new HashMap<UUID, PermanentView>();
private CardView topCard; private CardView topCard;
private UserDataView userDataView;
public PlayerView(Player player, GameState state, Game game) { public PlayerView(Player player, GameState state, Game game) {
this.playerId = player.getId(); this.playerId = player.getId();
@ -80,6 +81,11 @@ public class PlayerView implements Serializable {
} }
this.topCard = player.isTopCardRevealed() && player.getLibrary().size() > 0 ? this.topCard = player.isTopCardRevealed() && player.getLibrary().size() > 0 ?
new CardView(player.getLibrary().getFromTop(game)) : null; new CardView(player.getLibrary().getFromTop(game)) : null;
if (player.getUserData() != null) {
this.userDataView = new UserDataView(player.getUserData());
} else {
this.userDataView = new UserDataView(0);
}
} }
private boolean showInBattlefield(Permanent permanent, GameState state) { private boolean showInBattlefield(Permanent permanent, GameState state) {
@ -143,4 +149,8 @@ public class PlayerView implements Serializable {
public CardView getTopCard() { public CardView getTopCard() {
return this.topCard; return this.topCard;
} }
public UserDataView getUserData() {
return this.userDataView;
}
} }

View file

@ -83,6 +83,8 @@ import mage.game.tournament.Tournament;
import mage.player.ai.utils.RateCard; import mage.player.ai.utils.RateCard;
import mage.players.Player; import mage.players.Player;
import mage.players.PlayerImpl; import mage.players.PlayerImpl;
import mage.players.net.UserData;
import mage.players.net.UserGroup;
import mage.sets.Sets; import mage.sets.Sets;
import mage.target.Target; import mage.target.Target;
import mage.target.TargetAmount; import mage.target.TargetAmount;
@ -113,6 +115,7 @@ public class ComputerPlayer<T extends ComputerPlayer<T>> extends PlayerImpl<T> i
public ComputerPlayer(String name, RangeOfInfluence range) { public ComputerPlayer(String name, RangeOfInfluence range) {
super(name, range); super(name, range);
human = false; human = false;
userData = new UserData(UserGroup.COMPUTER, 64);
} }
protected ComputerPlayer(UUID id) { protected ComputerPlayer(UUID id) {

View file

@ -54,13 +54,8 @@ import mage.server.util.ServerMessagesUtil;
import mage.server.util.ThreadExecutor; import mage.server.util.ThreadExecutor;
import mage.utils.CompressUtil; import mage.utils.CompressUtil;
import mage.utils.MageVersion; import mage.utils.MageVersion;
import mage.view.*;
import mage.view.ChatMessage.MessageColor; 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; import org.apache.log4j.Logger;
/** /**
@ -83,7 +78,6 @@ public class MageServerImpl implements MageServer {
@Override @Override
public boolean registerClient(String userName, String sessionId, MageVersion version) throws MageException { public boolean registerClient(String userName, String sessionId, MageVersion version) throws MageException {
try { try {
if (version.compareTo(Main.getVersion()) != 0) if (version.compareTo(Main.getVersion()) != 0)
throw new MageVersionException(version, Main.getVersion()); throw new MageVersionException(version, Main.getVersion());
@ -96,6 +90,16 @@ public class MageServerImpl implements MageServer {
return false; 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 @Override
public boolean registerAdmin(String password, String sessionId, MageVersion version) throws MageException { public boolean registerAdmin(String password, String sessionId, MageVersion version) throws MageException {
try { try {

View file

@ -32,6 +32,9 @@ import java.util.Date;
import java.util.UUID; import java.util.UUID;
import mage.MageException; import mage.MageException;
import mage.interfaces.callback.ClientCallback; 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.apache.log4j.Logger;
import org.jboss.remoting.callback.AsynchInvokerCallbackHandler; import org.jboss.remoting.callback.AsynchInvokerCallbackHandler;
import org.jboss.remoting.callback.Callback; import org.jboss.remoting.callback.Callback;
@ -86,9 +89,33 @@ public class Session {
public void registerAdmin() { public void registerAdmin() {
this.isAdmin = true; this.isAdmin = true;
User user = UserManager.getInstance().createUser("Admin", host); User user = UserManager.getInstance().createUser("Admin", host);
user.setUserData(new UserData(UserGroup.ADMIN, 0));
this.userId = user.getId(); 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() { public String getId() {
return sessionId; return sessionId;
} }

View file

@ -30,9 +30,11 @@ package mage.server;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import mage.MageException; import mage.MageException;
import mage.players.net.UserData;
import mage.players.net.UserGroup;
import mage.view.UserDataView;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.jboss.remoting.callback.InvokerCallbackHandler; import org.jboss.remoting.callback.InvokerCallbackHandler;
@ -81,6 +83,15 @@ public class SessionManager {
return false; 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) { public synchronized void disconnect(String sessionId, boolean voluntary) {
Session session = sessions.get(sessionId); Session session = sessions.get(sessionId);
if (session != null) { if (session != null) {

View file

@ -27,16 +27,15 @@
*/ */
package mage.server; package mage.server;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.UUID; import java.util.UUID;
import mage.cards.decks.Deck; import mage.cards.decks.Deck;
import mage.game.Table; import mage.game.Table;
import mage.interfaces.callback.ClientCallback; import mage.interfaces.callback.ClientCallback;
import mage.players.net.UserData;
import mage.server.draft.DraftSession; import mage.server.draft.DraftSession;
import mage.server.game.GameManager; import mage.server.game.GameManager;
import mage.server.game.GameSession; import mage.server.game.GameSession;
@ -67,6 +66,8 @@ public class User {
private Map<UUID, TournamentSession> constructing = new HashMap<UUID, TournamentSession>(); private Map<UUID, TournamentSession> constructing = new HashMap<UUID, TournamentSession>();
private Map<UUID, Deck> sideboarding = new HashMap<UUID, Deck>(); private Map<UUID, Deck> sideboarding = new HashMap<UUID, Deck>();
private UserData userData;
public User(String userName, String host) { public User(String userName, String host) {
this.userName = userName; this.userName = userName;
this.host = host; this.host = host;
@ -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.Calendar;
import java.util.Collection; import java.util.Collection;
import java.util.Date;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import mage.players.net.UserData;
import mage.view.ChatMessage.MessageColor; import mage.view.ChatMessage.MessageColor;
/** /**

View file

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

View file

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

View file

@ -61,11 +61,13 @@ import mage.game.draft.Draft;
import mage.game.match.Match; import mage.game.match.Match;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.game.tournament.Tournament; import mage.game.tournament.Tournament;
import mage.players.net.UserData;
import mage.target.Target; import mage.target.Target;
import mage.target.TargetAmount; import mage.target.TargetAmount;
import mage.target.TargetCard; import mage.target.TargetCard;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
import mage.util.Copyable; import mage.util.Copyable;
import org.w3c.dom.UserDataHandler;
/** /**
* *
@ -103,6 +105,8 @@ public interface Player extends MageItem, Copyable<Player> {
public Set<UUID> getInRange(); public Set<UUID> getInRange();
public boolean isTopCardRevealed(); public boolean isTopCardRevealed();
public void setTopCardRevealed(boolean topCardRevealed); public void setTopCardRevealed(boolean topCardRevealed);
public UserData getUserData();
public void setUserData(UserData userData);
/** /**
* Returns a set of players which turns under you control. * Returns a set of players which turns under you control.

View file

@ -66,6 +66,7 @@ import mage.game.events.DamagedPlayerEvent;
import mage.game.permanent.Permanent; import mage.game.permanent.Permanent;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.game.stack.StackAbility; import mage.game.stack.StackAbility;
import mage.players.net.UserData;
import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetCardInLibrary;
import mage.target.common.TargetDiscard; import mage.target.common.TargetDiscard;
import mage.watchers.Watcher; import mage.watchers.Watcher;
@ -103,8 +104,11 @@ public abstract class PlayerImpl<T extends PlayerImpl<T>> implements Player, Ser
protected boolean isGameUnderControl = true; protected boolean isGameUnderControl = true;
protected UUID turnController; protected UUID turnController;
protected Set<UUID> playersUnderYourControl = new HashSet<UUID>(); protected Set<UUID> playersUnderYourControl = new HashSet<UUID>();
protected boolean topCardRevealed = false; protected boolean topCardRevealed = false;
protected UserData userData;
@Override @Override
public abstract T copy(); public abstract T copy();
@ -149,6 +153,7 @@ public abstract class PlayerImpl<T extends PlayerImpl<T>> implements Player, Ser
for (UUID id: player.inRange) { for (UUID id: player.inRange) {
this.inRange.add(id); this.inRange.add(id);
} }
this.userData = player.userData;
} }
@Override @Override
@ -1153,4 +1158,14 @@ public abstract class PlayerImpl<T extends PlayerImpl<T>> implements Player, Ser
public void setTopCardRevealed(boolean topCardRevealed) { public void setTopCardRevealed(boolean topCardRevealed) {
this.topCardRevealed = topCardRevealed; this.topCardRevealed = topCardRevealed;
} }
@Override
public UserData getUserData() {
return this.userData;
}
@Override
public void setUserData(UserData userData) {
this.userData = userData;
}
} }

View file

@ -0,0 +1,34 @@
package mage.players.net;
/**
* User data that is passed during connection to the server.
*
* @author ayrat
*/
public class UserData {
protected int groupId;
protected int avatarId;
protected String privateKey;
public UserData(UserGroup userGroup, int avatarId) {
this.groupId = userGroup.getGroupId();
this.avatarId = avatarId;
}
public void setGroupId(int groupId) {
this.groupId = groupId;
}
public int getGroupId() {
return groupId;
}
public int getAvatarId() {
return avatarId;
}
public void setAvatarId(int avatarId) {
this.avatarId = avatarId;
}
}

View file

@ -0,0 +1,22 @@
package mage.players.net;
/**
* @author ayrat
*/
public enum UserGroup {
COMPUTER(0),
PLAYER(1),
MAGE(3),
ADMIN(7);
private int groupId;
UserGroup(int groupId) {
this.groupId = groupId;
}
public int getGroupId() {
return this.groupId;
}
}