[vassalengine-svn] SF.net SVN: vassalengine: [2578] VASSAL-src/trunk/VASSAL
Brought to you by:
rodneykinney,
uckelman
From: <rod...@us...> - 2007-10-23 04:19:22
|
Revision: 2578 http://vassalengine.svn.sourceforge.net/vassalengine/?rev=2578&view=rev Author: rodneykinney Date: 2007-10-22 21:19:24 -0700 (Mon, 22 Oct 2007) Log Message: ----------- JabberClient continued Modified Paths: -------------- VASSAL-src/trunk/VASSAL/chat/ServerConfigurer.java VASSAL-src/trunk/VASSAL/chat/SimplePlayer.java VASSAL-src/trunk/VASSAL/chat/jabber/JabberClient.java VASSAL-src/trunk/VASSAL/chat/jabber/JabberClientFactory.java VASSAL-src/trunk/VASSAL/chat/jabber/JabberPlayer.java VASSAL-src/trunk/VASSAL/chat/node/NodeClientFactory.java VASSAL-src/trunk/VASSAL/i18n/VASSAL.properties Added Paths: ----------- VASSAL-src/trunk/VASSAL/chat/jabber/AccountInfo.java VASSAL-src/trunk/VASSAL/chat/jabber/ModuleAccountInfo.java Modified: VASSAL-src/trunk/VASSAL/chat/ServerConfigurer.java =================================================================== --- VASSAL-src/trunk/VASSAL/chat/ServerConfigurer.java 2007-10-20 13:46:07 UTC (rev 2577) +++ VASSAL-src/trunk/VASSAL/chat/ServerConfigurer.java 2007-10-23 04:19:24 UTC (rev 2578) @@ -130,7 +130,9 @@ }); box.add(jabberHost); // Disable Jabber server until next release -// controls.add(box); + if ("true".equals(System.getProperty("enableJabber"))) { + controls.add(box); + } directButton = new JRadioButton(DIRECT_BUTTON); directButton.setAlignmentX(0.0f); directButton.addItemListener(new ItemListener() { Modified: VASSAL-src/trunk/VASSAL/chat/SimplePlayer.java =================================================================== --- VASSAL-src/trunk/VASSAL/chat/SimplePlayer.java 2007-10-20 13:46:07 UTC (rev 2577) +++ VASSAL-src/trunk/VASSAL/chat/SimplePlayer.java 2007-10-23 04:19:24 UTC (rev 2578) @@ -54,7 +54,7 @@ public boolean equals(Object o) { if (o instanceof Player) { - return id != null && id.equals(((SimplePlayer) o).id); + return id != null && id.equals(((Player) o).getId()); } else { return false; Added: VASSAL-src/trunk/VASSAL/chat/jabber/AccountInfo.java =================================================================== --- VASSAL-src/trunk/VASSAL/chat/jabber/AccountInfo.java (rev 0) +++ VASSAL-src/trunk/VASSAL/chat/jabber/AccountInfo.java 2007-10-23 04:19:24 UTC (rev 2578) @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2000-2007 by Rodney Kinney + * + * 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.jabber; + +public interface AccountInfo { + String getUserName(); + String getPassword(); + String getModule(); + String getRealName(); +} Modified: VASSAL-src/trunk/VASSAL/chat/jabber/JabberClient.java =================================================================== --- VASSAL-src/trunk/VASSAL/chat/jabber/JabberClient.java 2007-10-20 13:46:07 UTC (rev 2577) +++ VASSAL-src/trunk/VASSAL/chat/jabber/JabberClient.java 2007-10-23 04:19:24 UTC (rev 2578) @@ -57,11 +57,13 @@ import org.jivesoftware.smackx.packet.DiscoverItems; import org.jivesoftware.smackx.packet.VCard; +import VASSAL.build.GameModule; import VASSAL.chat.ChatServerConnection; import VASSAL.chat.Player; import VASSAL.chat.PrivateChatManager; import VASSAL.chat.Room; import VASSAL.chat.ServerStatus; +import VASSAL.chat.SimplePlayer; import VASSAL.chat.SimpleStatus; import VASSAL.chat.messageboard.MessageBoard; import VASSAL.chat.ui.ChatControlsInitializer; @@ -82,8 +84,6 @@ private static final String QUERY_ROOMS = "http://jabber.org/protocol/muc#rooms"; private MessageBoard msgSvr; private XMPPConnection conn; - private String username; - private String password; private String host; private int port = 5222; private PropertyChangeSupport propSupport = new PropertyChangeSupport(this); @@ -93,6 +93,7 @@ private CommandEncoder encoder; private final JabberRoom defaultRoom; private MultiUserChat currentChat; + private AccountInfo account; protected MessageBoardControlsInitializer messageBoardControls; protected RoomInteractionControlsInitializer roomControls; // protected ServerStatusControlsInitializer serverStatusControls; @@ -100,12 +101,12 @@ protected JabberPlayer.Manager playerMgr = new JabberPlayer.Manager(); protected JabberRoom.Manager roomMgr = new JabberRoom.Manager(); - public JabberClient(CommandEncoder encoder, String host, int port, String username, String password) { + public JabberClient(CommandEncoder encoder, String host, int port, AccountInfo account) { + XMPPConnection.DEBUG_ENABLED = "true".equals(System.getProperty("enableJabber")); this.host = host; this.conferenceService = "conference." + host; - this.username = username; - this.password = password; this.encoder = encoder; + this.account = account; defaultRoom = roomMgr.getRoomByName(this, "Main Room"); messageBoardControls = new MessageBoardControlsInitializer(Resources.getString("Chat.messages"), msgSvr); //$NON-NLS-1$ roomControls = new RoomInteractionControlsInitializer(this); @@ -115,7 +116,6 @@ roomControls.addPlayerActionFactory(SendSoundAction.factory(this, Resources.getString("Chat.send_wakeup"), "wakeUpSound", "phone1.wav")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ // serverStatusControls = new ServerStatusControlsInitializer(serverStatus); playerStatusControls = new SimpleStatusControlsInitializer(this); - me = playerMgr.getPlayerByName(this, username); } public void addPropertyChangeListener(String propertyName, PropertyChangeListener l) { @@ -148,7 +148,9 @@ conn.disconnect(); } try { - me = playerMgr.getPlayerByName(this, username); + String username = account.getUserName(); + String password = account.getPassword(); + playerMgr.getPlayerByLogin(this, account.getUserName()).setName(account.getRealName()); ConnectionConfiguration config = new ConnectionConfiguration(host, port); config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled); config.setCompressionEnabled(true); @@ -157,28 +159,36 @@ conn = new XMPPConnection(config); conn.connect(); conn.addConnectionListener(new ConnectionListener()); - if (username == null || password == null) { - conn.loginAnonymously(); + try { + conn.login(username, password, "VASSAL"); } - else { - try { - conn.login(username, password, "VASSAL"); - } - catch (XMPPException e) { - // Create the account if it doesn't exist - if (e.getXMPPError() != null && e.getXMPPError().getCode() == 401) { - Map<String, String> attributes = new HashMap<String, String>(); - attributes.put("name", me.getName()); + catch (XMPPException e) { + // Create the account if it doesn't exist + if (e.getXMPPError() != null && e.getXMPPError().getCode() == 401) { + Map<String, String> attributes = new HashMap<String, String>(); + attributes.put("name", me.getName()); + try { conn.getAccountManager().createAccount(username, password, attributes); - conn.login(username, password); - VCard c = new VCard(); - c.setNickName(me.getName()); - c.save(conn); } - else { - throw e; + catch (XMPPException createAccountError) { + if (createAccountError.getXMPPError() != null && createAccountError.getXMPPError().getCode() == 409) { + // Account already exists. Password is incorrect + fireStatus(Resources.getString("Chat.invalid_password", username)); + setConnected(false); + return; + } + else { + throw e; + } } + conn.login(username, password, "VASSAL"); + VCard c = new VCard(); + c.setNickName(me.getName()); + c.save(conn); } + else { + throw e; + } } monitor = new MonitorRooms(); monitor.init(); @@ -227,26 +237,17 @@ // GameModule.getGameModule().addCommandEncoder(synchEncoder); // GameModule.getGameModule().addCommandEncoder(privateChatEncoder); // GameModule.getGameModule().addCommandEncoder(soundEncoder); - // me.setName((String) GameModule.getGameModule().getPrefs().getValue(GameModule.REAL_NAME)); - // GameModule.getGameModule().getPrefs().getOption(GameModule.REAL_NAME).addPropertyChangeListener(nameChangeListener); - SimpleStatus s = (SimpleStatus) me.getStatus(); - // s = new SimpleStatus(s.isLooking(), s.isAway(), (String) - // GameModule.getGameModule().getPrefs().getValue(GameModule.PERSONAL_INFO)); - me.setStatus(s); - // GameModule.getGameModule().getPrefs().getOption(GameModule.PERSONAL_INFO).addPropertyChangeListener(profileChangeListener); controls.getRoomTree().setCellRenderer(new LockableRoomTreeRenderer()); } public void uninitializeControls(ChatServerControls controls) { messageBoardControls.uninitializeControls(controls); roomControls.uninitializeControls(controls); + playerStatusControls.uninitializeControls(controls); // serverStatusControls.uninitializeControls(controls); - playerStatusControls.uninitializeControls(controls); // GameModule.getGameModule().removeCommandEncoder(synchEncoder); // GameModule.getGameModule().removeCommandEncoder(privateChatEncoder); // GameModule.getGameModule().removeCommandEncoder(soundEncoder); - // GameModule.getGameModule().getPrefs().getOption(GameModule.REAL_NAME).removePropertyChangeListener(nameChangeListener); - // GameModule.getGameModule().getPrefs().getOption(GameModule.PERSONAL_INFO).removePropertyChangeListener(profileChangeListener); } public void processPacket(Packet packet) { @@ -275,7 +276,7 @@ } if (!newRoom.equals(getRoom())) { leaveCurrentRoom(); - currentChat = newRoom.join(this, me); + currentChat = newRoom.join(this, (JabberPlayer) getUserInfo()); monitor.sendRoomChanged(); } } @@ -299,12 +300,12 @@ } public Player getUserInfo() { - return me; + return playerMgr.getPlayerByLogin(this, account.getUserName()); } - + public void setUserInfo(Player p) { if (monitor != null) { - monitor.sendStatus((SimpleStatus) p.getStatus()); + monitor.sendStatus((SimplePlayer) p); } } @@ -392,16 +393,18 @@ return StringUtils.escapeNode(getModule()) + "@" + getConferenceService(); } - public void sendStatus(SimpleStatus s) { - sendStatus(s, null); + public void sendStatus(SimplePlayer p) { + sendStatus(p, null); } - public void sendStatus(SimpleStatus s, String recipient) { + public void sendStatus(SimplePlayer player, String recipient) { + SimpleStatus s = (SimpleStatus) player.getStatus(); Presence p = new Presence(Presence.Type.available); p.setStatus(""); p.setMode(Presence.Mode.chat); p.setProperty("looking", s.isLooking()); p.setProperty("away", s.isAway()); + p.setProperty("realName",player.getName()); p.setTo(recipient == null ? monitorRoom.getRoom() : recipient); conn.sendPacket(p); } @@ -536,7 +539,7 @@ boolean accept = false; if (packet instanceof Presence) { Presence p = (Presence) packet; - if (p.getType() == Presence.Type.available) { + if (p.getType() == Presence.Type.available && p.getMode() == Presence.Mode.chat) { String name = p.getFrom(); if (name != null && name.toLowerCase().startsWith(prefix)) { accept = true; @@ -555,6 +558,7 @@ Object away = p.getProperty("away"); status = new SimpleStatus(looking == null ? false : (Boolean) looking, away == null ? false : (Boolean) away, profile); player.setStatus(status); + player.setName(String.valueOf(p.getProperty("realName"))); fireRoomsUpdated(); } } @@ -665,10 +669,27 @@ return null; } }; - String username = args.length == 0 ? "test" : args[0]; - String password = args.length == 0 ? "test" : args[1]; + final String username = args.length == 0 ? "test" : args[0]; + final String password = args.length == 0 ? "test" : args[1]; // JabberClient client = new JabberClient(c, "63.144.41.3", 5222, username, password); - JabberClient client = new JabberClient(c, "localhost", 5222, username, password); + AccountInfo account = new AccountInfo() { + public String getPassword() { + return password; + } + + public String getUserName() { + return username; + } + + public String getModule() { + return "JabberTestModule"; + } + + public String getRealName() { + return username; + } + }; + JabberClient client = new JabberClient(c, "localhost", 5222, account); client.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { System.err.println(evt.getPropertyName() + "=" + evt.getNewValue()); Modified: VASSAL-src/trunk/VASSAL/chat/jabber/JabberClientFactory.java =================================================================== --- VASSAL-src/trunk/VASSAL/chat/jabber/JabberClientFactory.java 2007-10-20 13:46:07 UTC (rev 2577) +++ VASSAL-src/trunk/VASSAL/chat/jabber/JabberClientFactory.java 2007-10-23 04:19:24 UTC (rev 2578) @@ -17,10 +17,16 @@ */ package VASSAL.chat.jabber; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.util.Properties; + +import javax.swing.SwingUtilities; + import VASSAL.build.GameModule; import VASSAL.chat.ChatServerConnection; import VASSAL.chat.ChatServerFactory; +import VASSAL.command.Command; /** * @author rkinney @@ -43,8 +49,28 @@ catch (NumberFormatException e) { e.printStackTrace(); } - String login = serverConfig.getProperty(JABBER_LOGIN, "anonymous"); //$NON-NLS-1$ - String password = serverConfig.getProperty(JABBER_PWD); - return new JabberClient(GameModule.getGameModule(), host, port, login, password); + ModuleAccountInfo account = new ModuleAccountInfo(); + JabberClient client = new JabberClient(GameModule.getGameModule(), host, port, account); + account.init(client); + client.addPropertyChangeListener(ChatServerConnection.STATUS, new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent evt) { + GameModule.getGameModule().warn((String) evt.getNewValue()); + } + }); + client.addPropertyChangeListener(ChatServerConnection.INCOMING_MSG, new PropertyChangeListener() { + public void propertyChange(final PropertyChangeEvent evt) { + final Command c = GameModule.getGameModule().decode((String) evt.getNewValue()); + if (c != null) { + Runnable runnable = new Runnable() { + public void run() { + c.execute(); + GameModule.getGameModule().getLogger().log(c); + } + }; + SwingUtilities.invokeLater(runnable); + } + } + }); + return client; } } Modified: VASSAL-src/trunk/VASSAL/chat/jabber/JabberPlayer.java =================================================================== --- VASSAL-src/trunk/VASSAL/chat/jabber/JabberPlayer.java 2007-10-20 13:46:07 UTC (rev 2577) +++ VASSAL-src/trunk/VASSAL/chat/jabber/JabberPlayer.java 2007-10-23 04:19:24 UTC (rev 2578) @@ -21,7 +21,6 @@ import java.util.HashMap; import java.util.Map; -import org.jivesoftware.smack.util.StringUtils; import VASSAL.chat.SimplePlayer; import VASSAL.chat.SimpleStatus; @@ -30,8 +29,8 @@ private String jid; private JabberRoom joinedRoom; - private JabberPlayer(String name, String jid) { - super(name); + private JabberPlayer(String jid) { + super(jid,"???",new SimpleStatus()); this.jid = jid; } @@ -72,14 +71,14 @@ } JabberPlayer p = jidToPlayer.get(jid); if (p == null) { - p = new JabberPlayer(StringUtils.parseResource(jid), jid); + p = new JabberPlayer(jid); jidToPlayer.put(jid, p); } return p; } - public JabberPlayer getPlayerByName(JabberClient client, String name) { - return getPlayer(StringUtils.escapeNode(name) + "@" + client.getHost() + "/VASSAL"); + public JabberPlayer getPlayerByLogin(JabberClient client, String login) { + return getPlayer(login + "@" + client.getHost() + "/VASSAL"); } public synchronized void deletePlayer(String jid) { Added: VASSAL-src/trunk/VASSAL/chat/jabber/ModuleAccountInfo.java =================================================================== --- VASSAL-src/trunk/VASSAL/chat/jabber/ModuleAccountInfo.java (rev 0) +++ VASSAL-src/trunk/VASSAL/chat/jabber/ModuleAccountInfo.java 2007-10-23 04:19:24 UTC (rev 2578) @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2000-2007 by Rodney Kinney + * + * 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.jabber; + +import java.awt.Component; +import java.awt.Container; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; + +import javax.swing.text.JTextComponent; + +import org.jivesoftware.smack.util.StringUtils; + +import VASSAL.build.GameModule; +import VASSAL.build.module.ServerConnection; +import VASSAL.configure.Configurer; + +public class ModuleAccountInfo implements AccountInfo { + private Configurer realNameConfig; + private Configurer pwdConfig; + + public ModuleAccountInfo() { + realNameConfig = GameModule.getGameModule().getPrefs().getOption(GameModule.REAL_NAME); + pwdConfig = GameModule.getGameModule().getPrefs().getOption(GameModule.SECRET_NAME); + } + + public String getPassword() { + return pwdConfig.getValueString(); + } + + public String getUserName() { + return StringUtils.escapeNode(realNameConfig.getValueString()).toLowerCase(); + } + + public String getRealName() { + return realNameConfig.getValueString(); + } + + public void init(JabberClient client) { + client.addPropertyChangeListener(ServerConnection.CONNECTED, new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent evt) { + setControlsEnabled(!Boolean.TRUE.equals(evt.getNewValue())); + } + }); + } + + private void setControlsEnabled(boolean enabled) { + setEditable(realNameConfig.getControls(), enabled); + setEditable(pwdConfig.getControls(), enabled); + } + + private void setEditable(Component c, boolean enabled) { + if (c instanceof JTextComponent) { + ((JTextComponent) c).setEnabled(enabled); + } + else if (c instanceof Container) { + for (int i = 0, n = ((Container) c).getComponentCount(); i < n; i++) { + setEditable(((Container) c).getComponent(i), enabled); + } + } + } + + public String getModule() { + return GameModule.getGameModule().getGameName(); + } +} Modified: VASSAL-src/trunk/VASSAL/chat/node/NodeClientFactory.java =================================================================== --- VASSAL-src/trunk/VASSAL/chat/node/NodeClientFactory.java 2007-10-20 13:46:07 UTC (rev 2577) +++ VASSAL-src/trunk/VASSAL/chat/node/NodeClientFactory.java 2007-10-23 04:19:24 UTC (rev 2578) @@ -72,9 +72,7 @@ GameModule.getGameModule().getPrefs().getOption(GameModule.PERSONAL_INFO).fireUpdate(); server.addPropertyChangeListener(ChatServerConnection.STATUS, new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { - if (GameModule.getGameModule().getChatter() != null) { - GameModule.getGameModule().getChatter().show((String) evt.getNewValue()); - } + GameModule.getGameModule().warn((String) evt.getNewValue()); } }); server.addPropertyChangeListener(ChatServerConnection.INCOMING_MSG, new PropertyChangeListener() { Modified: VASSAL-src/trunk/VASSAL/i18n/VASSAL.properties =================================================================== --- VASSAL-src/trunk/VASSAL/i18n/VASSAL.properties 2007-10-20 13:46:07 UTC (rev 2577) +++ VASSAL-src/trunk/VASSAL/i18n/VASSAL.properties 2007-10-23 04:19:24 UTC (rev 2578) @@ -98,6 +98,7 @@ Chat.display_connections=Display server connections for all modules Chat.message_board_title={0} Message Board Chat.unable_to_establish=Unable to establish connection to server: {0} +Chat.invalid_password=Invalid password for account {0} Chat.sender=Sender Chat.date=Date Chat.message=Message This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |