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() {
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 int avatarId = -1;
/** Creates new form PlayerPanel */
public PlayerPanelExt(boolean me) {
initComponents(me);
@ -115,6 +117,23 @@ public class PlayerPanelExt extends javax.swing.JPanel {
libraryLabel.setText(Integer.toString(player.getLibraryCount()));
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());
if (player.isActive()) {
this.avatar.setBorder(greenBorder);
@ -175,12 +194,7 @@ public class PlayerPanelExt extends javax.swing.JPanel {
add(panelBackground);
Rectangle r = new Rectangle(80, 80);
Random rand = new Random();
Integer index = me ? 51 : rand.nextInt(AVATAR_COUNT) + 1;
if (index == 64 || index == 65) {
index += 2;
}
Image image = ImageHelper.getImageFromResources("/avatars/face" + index + ".jpg");
Image image = ImageHelper.getImageFromResources("/avatars/51.jpg");
topCardPanel = Plugins.getInstance().getMageCard(new CardView(Sets.findCard("Forest")), bigCard, topCardDimension, gameId, true);
topCardPanel.setVisible(false);

View file

@ -36,12 +36,7 @@ import mage.cards.decks.DeckCardLists;
import mage.game.GameException;
import mage.game.tournament.TournamentOptions;
import mage.utils.MageVersion;
import mage.view.DraftPickView;
import mage.view.TableView;
import mage.view.GameView;
import mage.view.MatchView;
import mage.view.TournamentView;
import mage.view.UserView;
import mage.view.*;
/**
*
@ -53,6 +48,7 @@ public interface MageServer {
public boolean registerAdmin(String password, String sessionId, MageVersion version) 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;
//table methods

View file

@ -47,13 +47,7 @@ import mage.interfaces.MageServer;
import mage.interfaces.ServerState;
import mage.interfaces.callback.ClientCallback;
import mage.utils.CompressUtil;
import mage.view.DraftPickView;
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 mage.view.*;
import org.apache.log4j.Logger;
import org.jboss.remoting.Client;
import org.jboss.remoting.ConnectionListener;
@ -153,10 +147,14 @@ public class Session {
this.sessionId = callbackClient.getSessionId();
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());
else
server.setUserData(connection.getUsername(), sessionId, userDataView);
} else {
registerResult = server.registerAdmin(connection.getPassword(), sessionId, client.getVersion());
}
if (registerResult) {
sessionState = SessionState.CONNECTED;
serverState = server.getServerState();

View file

@ -58,6 +58,7 @@ public class PlayerView implements Serializable {
private SimpleCardsView graveyard = new SimpleCardsView();
private Map<UUID, PermanentView> battlefield = new HashMap<UUID, PermanentView>();
private CardView topCard;
private UserDataView userDataView;
public PlayerView(Player player, GameState state, Game game) {
this.playerId = player.getId();
@ -80,6 +81,11 @@ public class PlayerView implements Serializable {
}
this.topCard = player.isTopCardRevealed() && player.getLibrary().size() > 0 ?
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) {
@ -143,4 +149,8 @@ public class PlayerView implements Serializable {
public CardView getTopCard() {
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.players.Player;
import mage.players.PlayerImpl;
import mage.players.net.UserData;
import mage.players.net.UserGroup;
import mage.sets.Sets;
import mage.target.Target;
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) {
super(name, range);
human = false;
userData = new UserData(UserGroup.COMPUTER, 64);
}
protected ComputerPlayer(UUID id) {

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());
@ -96,6 +90,16 @@ 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,9 +89,33 @@ 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;
@ -81,6 +83,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);
if (session != null) {

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;
@ -67,6 +66,8 @@ public class User {
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;
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.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;
}
}

View file

@ -61,11 +61,13 @@ import mage.game.draft.Draft;
import mage.game.match.Match;
import mage.game.permanent.Permanent;
import mage.game.tournament.Tournament;
import mage.players.net.UserData;
import mage.target.Target;
import mage.target.TargetAmount;
import mage.target.TargetCard;
import mage.target.common.TargetCardInLibrary;
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 boolean isTopCardRevealed();
public void setTopCardRevealed(boolean topCardRevealed);
public UserData getUserData();
public void setUserData(UserData userData);
/**
* 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.events.GameEvent;
import mage.game.stack.StackAbility;
import mage.players.net.UserData;
import mage.target.common.TargetCardInLibrary;
import mage.target.common.TargetDiscard;
import mage.watchers.Watcher;
@ -103,8 +104,11 @@ public abstract class PlayerImpl<T extends PlayerImpl<T>> implements Player, Ser
protected boolean isGameUnderControl = true;
protected UUID turnController;
protected Set<UUID> playersUnderYourControl = new HashSet<UUID>();
protected boolean topCardRevealed = false;
protected UserData userData;
@Override
public abstract T copy();
@ -149,6 +153,7 @@ public abstract class PlayerImpl<T extends PlayerImpl<T>> implements Player, Ser
for (UUID id: player.inRange) {
this.inRange.add(id);
}
this.userData = player.userData;
}
@Override
@ -1153,4 +1158,14 @@ public abstract class PlayerImpl<T extends PlayerImpl<T>> implements Player, Ser
public void setTopCardRevealed(boolean 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;
}
}