From 21b7ad8808aab8fcbcfb5f5a946fbd3591a2be3f Mon Sep 17 00:00:00 2001 From: BetaSteward Date: Mon, 16 May 2011 22:58:58 -0400 Subject: [PATCH] added HTTP proxy - fixes issues 77 & 78 --- .../src/main/java/mage/client/MageFrame.java | 23 +- .../mage/client/dialog/ConnectDialog.form | 313 ++++++++++++------ .../mage/client/dialog/ConnectDialog.java | 229 +++++++++---- .../main/java/mage/client/remote/Session.java | 60 +++- 4 files changed, 430 insertions(+), 195 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/MageFrame.java b/Mage.Client/src/main/java/mage/client/MageFrame.java index dcf3cf79edb..1c407e05f8d 100644 --- a/Mage.Client/src/main/java/mage/client/MageFrame.java +++ b/Mage.Client/src/main/java/mage/client/MageFrame.java @@ -80,6 +80,8 @@ import mage.client.tournament.TournamentPane; import mage.game.match.MatchOptions; import mage.utils.MageVersion; import mage.sets.Sets; +import mage.utils.Connection; +import mage.utils.Connection.ProxyType; import mage.view.TableView; import org.apache.log4j.Logger; @@ -460,12 +462,8 @@ public class MageFrame extends javax.swing.JFrame { } } - public static boolean connect(String userName, String serverName, int port) { - return session.connect(userName, serverName, port); - } - - public static boolean connect(String userName, String serverName, int port, String proxyServer, int proxyPort) { - return session.connect(userName, serverName, port, proxyServer, proxyPort); + public static boolean connect(Connection connection) { + return session.connect(connection); } public boolean autoConnect() { @@ -476,10 +474,19 @@ public class MageFrame extends javax.swing.JFrame { int port = Integer.parseInt(prefs.get("serverPort", "")); String proxyServer = prefs.get("proxyAddress", ""); int proxyPort = Integer.parseInt(prefs.get("proxyPort", "")); - boolean useProxy = Boolean.parseBoolean(prefs.get("useProxy", "false")); + ProxyType proxyType = Connection.ProxyType.valueOf(prefs.get("proxyType", "None")); + String proxyUsername = prefs.get("proxyUsername", ""); try { setCursor(new Cursor(Cursor.WAIT_CURSOR)); - if (MageFrame.connect(userName, server, port, useProxy?proxyServer:"", useProxy?proxyPort:0)) { + Connection connection = new Connection(); + connection.setUsername(userName); + connection.setHost(server); + connection.setPort(port); + connection.setProxyType(proxyType); + connection.setProxyHost(proxyServer); + connection.setProxyPort(proxyPort); + connection.setProxyUsername(proxyUsername); + if (MageFrame.connect(connection)) { return true; } else { JOptionPane.showMessageDialog(rootPane, "Unable to connect to server"); diff --git a/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.form b/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.form index f8b684ffa52..688a76f0505 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.form +++ b/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.form @@ -30,38 +30,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + + + + + + + @@ -87,9 +84,12 @@ - + + + + - + @@ -158,76 +158,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -235,8 +165,189 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java b/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java index 22c6408d8fb..294ebeac64e 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/ConnectDialog.java @@ -40,6 +40,7 @@ import java.io.InputStreamReader; import java.net.URL; import java.util.ArrayList; import java.util.List; +import javax.swing.DefaultComboBoxModel; import javax.swing.JList; import javax.swing.JOptionPane; @@ -50,6 +51,8 @@ import javax.swing.event.ListSelectionListener; import mage.client.MageFrame; import mage.client.util.Config; +import mage.utils.Connection; +import mage.utils.Connection.ProxyType; import org.apache.log4j.Logger; @@ -65,6 +68,7 @@ public class ConnectDialog extends MageDialog { /** Creates new form ConnectDialog */ public ConnectDialog() { initComponents(); + cbProxyType.setModel(new DefaultComboBoxModel(Connection.ProxyType.values())); } public void showDialog() { @@ -74,7 +78,7 @@ public class ConnectDialog extends MageDialog { this.chkAutoConnect.setSelected(Boolean.parseBoolean(MageFrame.getPreferences().get("autoConnect", "false"))); this.txtProxyServer.setText(MageFrame.getPreferences().get("proxyAddress", Config.serverName)); this.txtProxyPort.setText(MageFrame.getPreferences().get("proxyPort", Integer.toString(Config.port))); - this.chkUseProxy.setSelected(Boolean.parseBoolean(MageFrame.getPreferences().get("useProxy", "false"))); + this.cbProxyType.setSelectedItem(MageFrame.getPreferences().get("proxyType", Connection.ProxyType.NONE.toString())); this.showProxySettings(); this.setModal(true); this.setLocation(50, 50); @@ -82,11 +86,20 @@ public class ConnectDialog extends MageDialog { } private void showProxySettings() { - if (chkUseProxy.isSelected()) { + if (cbProxyType.getSelectedItem() == Connection.ProxyType.SOCKS) { this.pnlProxy.setVisible(true); + this.pnlProxyAuth.setVisible(false); + this.pnlProxySettings.setVisible(true); } - else { + else if (cbProxyType.getSelectedItem() == Connection.ProxyType.HTTP) { + this.pnlProxy.setVisible(true); + this.pnlProxyAuth.setVisible(true); + this.pnlProxySettings.setVisible(true); + } + else if (cbProxyType.getSelectedItem() == Connection.ProxyType.NONE) { this.pnlProxy.setVisible(false); + this.pnlProxyAuth.setVisible(false); + this.pnlProxySettings.setVisible(false); } this.pack(); this.revalidate(); @@ -100,7 +113,7 @@ public class ConnectDialog extends MageDialog { MageFrame.getPreferences().put("autoConnect", Boolean.toString(chkAutoConnect.isSelected())); MageFrame.getPreferences().put("proxyAddress", txtProxyServer.getText()); MageFrame.getPreferences().put("proxyPort", txtProxyPort.getText()); - MageFrame.getPreferences().put("useProxy", Boolean.toString(chkUseProxy.isSelected())); + MageFrame.getPreferences().put("proxyType", cbProxyType.getSelectedItem().toString()); } /** This method is called from within the constructor to @@ -121,13 +134,20 @@ public class ConnectDialog extends MageDialog { btnConnect = new javax.swing.JButton(); btnCancel = new javax.swing.JButton(); chkAutoConnect = new javax.swing.JCheckBox(); - chkUseProxy = new javax.swing.JCheckBox(); + jButton1 = new javax.swing.JButton(); + cbProxyType = new javax.swing.JComboBox(); + lblProxyType = new javax.swing.JLabel(); + pnlProxySettings = new javax.swing.JPanel(); pnlProxy = new javax.swing.JPanel(); lblProxyServer = new javax.swing.JLabel(); txtProxyServer = new javax.swing.JTextField(); lblProxyPort = new javax.swing.JLabel(); txtProxyPort = new javax.swing.JTextField(); - jButton1 = new javax.swing.JButton(); + pnlProxyAuth = new javax.swing.JPanel(); + lblProxyUserName = new javax.swing.JLabel(); + txtProxyUserName = new javax.swing.JTextField(); + txtProxyPassword = new javax.swing.JTextField(); + lblProxyPassword = new javax.swing.JLabel(); setTitle("Connect"); setNormalBounds(new java.awt.Rectangle(100, 100, 410, 307)); @@ -168,17 +188,31 @@ public class ConnectDialog extends MageDialog { } }); - chkUseProxy.setText("Use Proxy"); - chkUseProxy.addActionListener(new java.awt.event.ActionListener() { + jButton1.setText("Find..."); + jButton1.setToolTipText("Find public server"); + jButton1.setName("findServerBtn"); // NOI18N + jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - chkUseProxyActionPerformed(evt); + findPublicServerActionPerformed(evt); } }); - lblProxyServer.setLabelFor(txtServer); + cbProxyType.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cbProxyTypeActionPerformed(evt); + } + }); + + lblProxyType.setLabelFor(cbProxyType); + lblProxyType.setText("Proxy:"); + + pnlProxySettings.setBorder(javax.swing.BorderFactory.createEtchedBorder()); + pnlProxySettings.setMinimumSize(new java.awt.Dimension(0, 0)); + + lblProxyServer.setLabelFor(txtProxyServer); lblProxyServer.setText("Server:"); - lblProxyPort.setLabelFor(txtPort); + lblProxyPort.setLabelFor(txtProxyPort); lblProxyPort.setText("Port:"); txtProxyPort.addKeyListener(new java.awt.event.KeyAdapter() { @@ -191,37 +225,87 @@ public class ConnectDialog extends MageDialog { pnlProxy.setLayout(pnlProxyLayout); pnlProxyLayout.setHorizontalGroup( pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlProxyLayout.createSequentialGroup() - .addGap(30, 30, 30) - .addGroup(pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(lblProxyPort) - .addComponent(lblProxyServer)) + .addGroup(pnlProxyLayout.createSequentialGroup() + .addGroup(pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addGroup(pnlProxyLayout.createSequentialGroup() + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(lblProxyPort)) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, pnlProxyLayout.createSequentialGroup() + .addGap(28, 28, 28) + .addComponent(lblProxyServer))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(txtProxyPort, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(txtProxyServer, javax.swing.GroupLayout.DEFAULT_SIZE, 260, Short.MAX_VALUE)) + .addComponent(txtProxyServer, javax.swing.GroupLayout.DEFAULT_SIZE, 360, Short.MAX_VALUE) + .addComponent(txtProxyPort, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap()) ); pnlProxyLayout.setVerticalGroup( pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(pnlProxyLayout.createSequentialGroup() .addGroup(pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(lblProxyServer) - .addComponent(txtProxyServer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(txtProxyServer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(lblProxyServer)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(pnlProxyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(lblProxyPort) - .addComponent(txtProxyPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addComponent(txtProxyPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); - jButton1.setText("Find..."); - jButton1.setToolTipText("Find public server"); - jButton1.setName("findServerBtn"); // NOI18N - jButton1.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - findPublicServerActionPerformed(evt); - } - }); + lblProxyUserName.setLabelFor(txtProxyUserName); + lblProxyUserName.setText("User Name:"); + + lblProxyPassword.setLabelFor(txtProxyPassword); + lblProxyPassword.setText("Password:"); + + javax.swing.GroupLayout pnlProxyAuthLayout = new javax.swing.GroupLayout(pnlProxyAuth); + pnlProxyAuth.setLayout(pnlProxyAuthLayout); + pnlProxyAuthLayout.setHorizontalGroup( + pnlProxyAuthLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 438, Short.MAX_VALUE) + .addGroup(pnlProxyAuthLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(pnlProxyAuthLayout.createSequentialGroup() + .addContainerGap() + .addGroup(pnlProxyAuthLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(lblProxyUserName) + .addComponent(lblProxyPassword)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(pnlProxyAuthLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(txtProxyPassword, javax.swing.GroupLayout.DEFAULT_SIZE, 358, Short.MAX_VALUE) + .addComponent(txtProxyUserName, javax.swing.GroupLayout.DEFAULT_SIZE, 358, Short.MAX_VALUE)) + .addContainerGap())) + ); + pnlProxyAuthLayout.setVerticalGroup( + pnlProxyAuthLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 59, Short.MAX_VALUE) + .addGroup(pnlProxyAuthLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(pnlProxyAuthLayout.createSequentialGroup() + .addGap(2, 2, 2) + .addGroup(pnlProxyAuthLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(lblProxyUserName) + .addComponent(txtProxyUserName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(pnlProxyAuthLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(txtProxyPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(lblProxyPassword)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + ); + + javax.swing.GroupLayout pnlProxySettingsLayout = new javax.swing.GroupLayout(pnlProxySettings); + pnlProxySettings.setLayout(pnlProxySettingsLayout); + pnlProxySettingsLayout.setHorizontalGroup( + pnlProxySettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(pnlProxy, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(pnlProxyAuth, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + ); + pnlProxySettingsLayout.setVerticalGroup( + pnlProxySettingsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(pnlProxySettingsLayout.createSequentialGroup() + .addComponent(pnlProxy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(pnlProxyAuth, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap()) + ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); @@ -232,29 +316,28 @@ public class ConnectDialog extends MageDialog { .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(lblProxyType) + .addComponent(lblPort) + .addComponent(lblServer) + .addComponent(lblUserName)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addComponent(btnConnect) + .addComponent(txtPort, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(131, 131, 131)) + .addComponent(txtUserName, javax.swing.GroupLayout.DEFAULT_SIZE, 382, Short.MAX_VALUE) + .addComponent(chkAutoConnect, javax.swing.GroupLayout.DEFAULT_SIZE, 382, Short.MAX_VALUE) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addComponent(txtServer, javax.swing.GroupLayout.DEFAULT_SIZE, 311, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnCancel)) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(lblPort) - .addComponent(lblServer) - .addComponent(lblUserName)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(txtPort, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(131, 131, 131)) - .addComponent(txtUserName, javax.swing.GroupLayout.DEFAULT_SIZE, 270, Short.MAX_VALUE) - .addComponent(chkAutoConnect, javax.swing.GroupLayout.DEFAULT_SIZE, 270, Short.MAX_VALUE) - .addComponent(chkUseProxy, javax.swing.GroupLayout.DEFAULT_SIZE, 270, Short.MAX_VALUE) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addComponent(txtServer, javax.swing.GroupLayout.DEFAULT_SIZE, 199, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jButton1))))) - .addContainerGap()) - .addComponent(pnlProxy, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + .addComponent(jButton1)) + .addComponent(cbProxyType, javax.swing.GroupLayout.PREFERRED_SIZE, 126, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addComponent(btnConnect) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(btnCancel)) + .addComponent(pnlProxySettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -275,9 +358,11 @@ public class ConnectDialog extends MageDialog { .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(chkAutoConnect) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(chkUseProxy) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(cbProxyType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(lblProxyType)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(pnlProxy, javax.swing.GroupLayout.DEFAULT_SIZE, 51, Short.MAX_VALUE) + .addComponent(pnlProxySettings, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(btnCancel) @@ -315,17 +400,18 @@ public class ConnectDialog extends MageDialog { try { setCursor(new Cursor(Cursor.WAIT_CURSOR)); - if (chkUseProxy.isSelected()) { - if (MageFrame.connect(txtUserName.getText(), txtServer.getText().trim(), Integer.valueOf(txtPort.getText()), txtProxyServer.getText().trim(), Integer.valueOf(txtProxyPort.getText()))) { - this.saveSettings(); - this.setVisible(false); - } - } - else { - if (MageFrame.connect(txtUserName.getText(), txtServer.getText().trim(), Integer.valueOf(txtPort.getText()))) { - this.saveSettings(); - this.setVisible(false); - } + Connection connection = new Connection(); + connection.setHost(this.txtServer.getText()); + connection.setPort(Integer.valueOf(this.txtPort.getText())); + connection.setUsername(this.txtUserName.getText()); + connection.setProxyType((ProxyType) this.cbProxyType.getSelectedItem()); + connection.setProxyHost(this.txtProxyServer.getText()); + connection.setProxyPort(Integer.valueOf(this.txtProxyPort.getText())); + connection.setProxyUsername(this.txtProxyUserName.getText()); + connection.setProxyPassword(this.txtProxyPassword.getText()); + if (MageFrame.connect(connection)) { + this.saveSettings(); + this.setVisible(false); } } finally { @@ -349,10 +435,6 @@ public class ConnectDialog extends MageDialog { // TODO add your handling code here: }//GEN-LAST:event_txtProxyPortkeyTyped - private void chkUseProxyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkUseProxyActionPerformed - this.showProxySettings(); - }//GEN-LAST:event_chkUseProxyActionPerformed - private void findPublicServerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed BufferedReader in = null; try { @@ -393,22 +475,33 @@ public class ConnectDialog extends MageDialog { } }//GEN-LAST:event_jButton1ActionPerformed + private void cbProxyTypeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbProxyTypeActionPerformed + this.showProxySettings(); + }//GEN-LAST:event_cbProxyTypeActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton btnCancel; private javax.swing.JButton btnConnect; + private javax.swing.JComboBox cbProxyType; private javax.swing.JCheckBox chkAutoConnect; - private javax.swing.JCheckBox chkUseProxy; private javax.swing.JButton jButton1; private javax.swing.JLabel lblPort; + private javax.swing.JLabel lblProxyPassword; private javax.swing.JLabel lblProxyPort; private javax.swing.JLabel lblProxyServer; + private javax.swing.JLabel lblProxyType; + private javax.swing.JLabel lblProxyUserName; private javax.swing.JLabel lblServer; private javax.swing.JLabel lblUserName; private javax.swing.JPanel pnlProxy; + private javax.swing.JPanel pnlProxyAuth; + private javax.swing.JPanel pnlProxySettings; private javax.swing.JTextField txtPort; + private javax.swing.JTextField txtProxyPassword; private javax.swing.JTextField txtProxyPort; private javax.swing.JTextField txtProxyServer; + private javax.swing.JTextField txtProxyUserName; private javax.swing.JTextField txtServer; private javax.swing.JTextField txtUserName; // End of variables declaration//GEN-END:variables diff --git a/Mage.Client/src/main/java/mage/client/remote/Session.java b/Mage.Client/src/main/java/mage/client/remote/Session.java index 95ad65df908..4bc11d37d56 100644 --- a/Mage.Client/src/main/java/mage/client/remote/Session.java +++ b/Mage.Client/src/main/java/mage/client/remote/Session.java @@ -28,6 +28,8 @@ package mage.client.remote; +import java.net.Authenticator; +import java.net.PasswordAuthentication; import java.rmi.NotBoundException; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; @@ -57,7 +59,7 @@ import mage.game.tournament.TournamentOptions; import mage.interfaces.Server; import mage.interfaces.ServerState; import mage.interfaces.callback.CallbackClientDaemon; -import mage.util.Logging; +import mage.utils.Connection; import mage.view.DraftPickView; import mage.view.GameTypeView; import mage.view.TableView; @@ -91,35 +93,41 @@ public class Session { public Session(MageFrame frame) { this.frame = frame; } - public boolean connect(String userName, String serverName, int port) { - return connect(userName, serverName, port, "", 0); - } - public boolean connect(String userName, String serverName, int port, String proxyServer, int proxyPort) { + public boolean connect(Connection connection) { if (isConnected()) { disconnect(); } try { System.setSecurityManager(null); - if (proxyServer.length() > 0) { - System.setProperty("socksProxyHost", proxyServer); - System.setProperty("socksProxyPort", Integer.toString(proxyPort)); + switch (connection.getProxyType()) { + case SOCKS: + System.setProperty("socksProxyHost", connection.getProxyHost()); + System.setProperty("socksProxyPort", Integer.toString(connection.getProxyPort())); + break; + case HTTP: + System.setProperty("http.proxyHost", connection.getProxyHost()); + System.setProperty("http.proxyPort", Integer.toString(connection.getProxyPort())); + Authenticator.setDefault(new MageAuthenticator(connection.getProxyUsername(), connection.getProxyPassword())); + break; + default: + System.clearProperty("socksProxyHost"); + System.clearProperty("socksProxyPort"); + System.clearProperty("http.proxyHost"); + System.clearProperty("http.proxyPort"); + break; } - else { - System.clearProperty("socksProxyHost"); - System.clearProperty("socksProxyPort"); - } - Registry reg = LocateRegistry.getRegistry(serverName, port); + Registry reg = LocateRegistry.getRegistry(connection.getHost(), connection.getPort()); this.server = (Server) reg.lookup(Config.remoteServer); - this.userName = userName; + this.userName = connection.getUsername(); if (client == null) client = new Client(this, frame); sessionId = server.registerClient(userName, client.getId(), frame.getVersion()); callbackDaemon = new CallbackClientDaemon(sessionId, client, server); serverState = server.getServerState(); future = sessionExecutor.scheduleWithFixedDelay(new ServerPinger(), 5, 5, TimeUnit.SECONDS); - logger.info("Connected to RMI server at " + serverName + ":" + port); - frame.setStatusText("Connected to " + serverName + ":" + port + " "); + logger.info("Connected to RMI server at " + connection.getHost() + ":" + connection.getPort()); + frame.setStatusText("Connected to " + connection.getHost() + ":" + connection.getPort() + " "); frame.enableButtons(); return true; } catch (MageException ex) { @@ -742,14 +750,14 @@ public class Session { private void handleRemoteException(RemoteException ex) { logger.fatal("Communication error", ex); - removeServer(); + JOptionPane.showMessageDialog(MageFrame.getDesktop(), "Critical server error. Disconnecting", "Error", JOptionPane.ERROR_MESSAGE); + disconnect(); } private void handleMageException(MageException ex) { logger.fatal("Server error", ex); JOptionPane.showMessageDialog(MageFrame.getDesktop(), "Critical server error. Disconnecting", "Error", JOptionPane.ERROR_MESSAGE); disconnect(); - frame.disableButtons(); } private void handleGameException(GameException ex) { @@ -789,4 +797,20 @@ public class Session { } } +} + +class MageAuthenticator extends Authenticator { + + private String username; + private String password; + + public MageAuthenticator(String username, String password) { + this.username = username; + this.password = password; + } + + @Override + public PasswordAuthentication getPasswordAuthentication () { + return new PasswordAuthentication (username, password.toCharArray()); + } } \ No newline at end of file