/* * $Id$ * * Copyright (c) 2000-2009 by Rodney Kinney, Brent Easton * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License (LGPL) as published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, copies are available * at http://www.opensource.org. */ package VASSAL.chat.node; import java.util.List; import java.util.Properties; import VASSAL.chat.LockableRoom; import VASSAL.chat.Player; import VASSAL.chat.SimpleRoom; import VASSAL.configure.StringArrayConfigurer; /** * Subclass of {@link SimpleRoom} for use on the client side of a hierarchical server */ public class NodeRoom extends SimpleRoom implements LockableRoom { public static final String OWNER = "owner"; //$NON-NLS-1$ public static final String MEMBERS = "members"; //$NON-NLS-1$ public static final String STATUS = "status"; //$NON-NLS-1$ public static final String LOCKED = "locked"; //$NON-NLS-1$ private String owner; // The userId (as in GameModule.getUserId() of the player who created the room private String[] members; // The players who were in the room at the time it was closed; private boolean locked; // If locked, no new players may join public NodeRoom() { } public void setOwner(String owner) { this.owner = owner; } public NodeRoom(String name) { super(name); } public NodeRoom(String name, Player[] players) { super(name, players); } public void setInfo(Properties p) { owner = p.getProperty(OWNER,owner); members = StringArrayConfigurer.stringToArray(p.getProperty(MEMBERS,StringArrayConfigurer.arrayToString(members))); locked = "true".equals(p.getProperty(LOCKED)); //$NON-NLS-1$ } public Properties getInfo() { Properties p = new Properties(); if (owner != null) { p.setProperty(OWNER, owner); } if (locked) { p.setProperty(LOCKED,"true"); //$NON-NLS-1$ } if (members != null) { p.setProperty(MEMBERS, StringArrayConfigurer.arrayToString(members)); } return p; } /** * Set the members to be the list of players currently in the room */ public void setMembersToCurrentPlayers() { List<Player> l = getPlayerList(); NodePlayer[] p = l.toArray(new NodePlayer[l.size()]); members = new String[p.length]; for (int i = 0; i < p.length; i++) { members[i] = p[i].getId(); } } public String[] getMembers() { return members; } public boolean isMember(NodePlayer p) { boolean isMember = false; if (members != null) { for (int i = 0; !isMember && i < members.length; i++) { isMember = p.getId().equals(members[i]); } } return isMember; } public boolean isOwner(NodePlayer p) { return p != null && owner != null && owner.equals(p.getId()); } public boolean isOwner(String jid) { return jid.equals(owner); } public String getOwner() { return owner; } public Player getOwningPlayer() { return getPlayer(owner); } public void lock() { locked = true; } public void toggleLock() { locked = !locked; } public boolean isLocked() { return locked; } }