/* * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ /* * ConnectDialog.java * * Created on 20-Jan-2010, 9:37:07 PM */ package mage.client.dialog; import java.awt.Cursor; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.InputStreamReader; import java.io.Writer; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.SocketException; import java.net.SocketTimeoutException; import java.net.URL; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import javax.swing.DefaultComboBoxModel; import javax.swing.JLayeredPane; import javax.swing.JOptionPane; import javax.swing.SwingWorker; import mage.choices.Choice; import mage.choices.ChoiceImpl; import mage.client.MageFrame; import static mage.client.dialog.PreferencesDialog.KEY_CONNECTION_URL_SERVER_LIST; import static mage.client.dialog.PreferencesDialog.KEY_CONNECT_AUTO_CONNECT; import static mage.client.dialog.PreferencesDialog.KEY_CONNECT_FLAG; import mage.client.preference.MagePreferences; import mage.client.util.Config; import mage.client.util.gui.countryBox.CountryItemEditor; import mage.client.util.sets.ConstructedFormats; import mage.remote.Connection; import org.apache.log4j.Logger; /** * @author BetaSteward_at_googlemail.com */ public class ConnectDialog extends MageDialog { private static final Logger logger = Logger.getLogger(ConnectDialog.class); private Connection connection; private ConnectTask task; private final RegisterUserDialog registerUserDialog; private final ResetPasswordDialog resetPasswordDialog; private final ActionListener connectAction = evt -> btnConnectActionPerformed(evt); /** * Creates new form ConnectDialog */ public ConnectDialog() { initComponents(); this.txtServer.addActionListener(connectAction); this.txtPort.addActionListener(connectAction); this.txtUserName.addActionListener(connectAction); this.txtPassword.addActionListener(connectAction); registerUserDialog = new RegisterUserDialog(this); MageFrame.getDesktop().add(registerUserDialog, JLayeredPane.POPUP_LAYER); resetPasswordDialog = new ResetPasswordDialog(this); MageFrame.getDesktop().add(resetPasswordDialog, JLayeredPane.POPUP_LAYER); } public void showDialog() { String serverAddress = MagePreferences.getServerAddressWithDefault(Config.serverName); this.txtServer.setText(serverAddress); this.txtPort.setText(Integer.toString(MagePreferences.getServerPortWithDefault(Config.port))); this.txtUserName.setText(MagePreferences.getUserName(serverAddress)); this.txtPassword.setText(MagePreferences.getPassword(serverAddress)); this.chkAutoConnect.setSelected(Boolean.parseBoolean(MageFrame.getPreferences().get(KEY_CONNECT_AUTO_CONNECT, "false"))); this.chkForceUpdateDB.setSelected(false); // has always to be set manually to force comparison String selectedFlag = MageFrame.getPreferences().get(KEY_CONNECT_FLAG, "world"); // set the selected country/flag for (int i = 0; i < cbFlag.getItemCount(); i++) { String[] name = (String[]) cbFlag.getItemAt(i); if (name[1].equals(selectedFlag)) { cbFlag.setSelectedIndex(i); break; } } this.setModal(true); this.setLocation(50, 50); this.setVisible(true); } private void saveSettings() { String serverAddress = txtServer.getText().trim(); MagePreferences.setServerAddress(serverAddress); MagePreferences.setServerPort(Integer.parseInt(txtPort.getText().trim())); MagePreferences.setUserName(serverAddress, txtUserName.getText().trim()); MagePreferences.setPassword(serverAddress, txtPassword.getText().trim()); MageFrame.getPreferences().put(KEY_CONNECT_AUTO_CONNECT, Boolean.toString(chkAutoConnect.isSelected())); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents private void initComponents() { lblServer = new javax.swing.JLabel(); txtServer = new javax.swing.JTextField(); btnFind = new javax.swing.JButton(); lblPort = new javax.swing.JLabel(); txtPort = new javax.swing.JTextField(); lblUserName = new javax.swing.JLabel(); txtUserName = new javax.swing.JTextField(); lblPassword = new javax.swing.JLabel(); txtPassword = new javax.swing.JPasswordField(); lblFlag = new javax.swing.JLabel(); chkAutoConnect = new javax.swing.JCheckBox(); chkForceUpdateDB = new javax.swing.JCheckBox(); jProxySettingsButton = new javax.swing.JButton(); btnConnect = new javax.swing.JButton(); btnCancel = new javax.swing.JButton(); lblStatus = new javax.swing.JLabel(); btnRegister = new javax.swing.JButton(); btnForgotPassword = new javax.swing.JButton(); btnFind1 = new javax.swing.JButton(); btnFind2 = new javax.swing.JButton(); btnFind3 = new javax.swing.JButton(); lblFastConnect = new javax.swing.JLabel(); panelFlag = new javax.swing.JPanel(); cbFlag = new mage.client.util.gui.countryBox.CountryComboBox(); filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(5, 0), new java.awt.Dimension(4, 0), new java.awt.Dimension(5, 32767)); btnFlagSearch = new javax.swing.JButton(); setTitle("Connect to server"); setNormalBounds(new java.awt.Rectangle(100, 100, 410, 307)); lblServer.setLabelFor(txtServer); lblServer.setText("Server:"); btnFind.setText("Find..."); btnFind.setToolTipText("Shows the list of public servers"); btnFind.setName("findServerBtn"); // NOI18N btnFind.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { findPublicServerActionPerformed(evt); } }); lblPort.setLabelFor(txtPort); lblPort.setText("Port:"); txtPort.addKeyListener(new java.awt.event.KeyAdapter() { public void keyTyped(java.awt.event.KeyEvent evt) { ConnectDialog.this.keyTyped(evt); } }); lblUserName.setLabelFor(txtUserName); lblUserName.setText("User name:"); lblPassword.setLabelFor(txtPassword); lblPassword.setText("Password:"); lblFlag.setLabelFor(txtUserName); lblFlag.setText("User flag:"); chkAutoConnect.setText("Automatically connect to this server next time"); chkAutoConnect.setToolTipText("If active this connect dialog will not be shown if you choose to connect.
\nInstead XMage tries to connect to the last server you were connected to."); chkAutoConnect.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { chkAutoConnectActionPerformed(evt); } }); chkForceUpdateDB.setText("Force update of card database"); chkForceUpdateDB.setToolTipText("If active the comparison of the server cards database to the client database will be enforced.
If not, the comparison will only done if the database version of the client is lower than the version of the server."); chkForceUpdateDB.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { chkForceUpdateDBActionPerformed(evt); } }); jProxySettingsButton.setText("Proxy Settings..."); jProxySettingsButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jProxySettingsButtonActionPerformed(evt); } }); btnConnect.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N btnConnect.setText("Connect to server"); btnConnect.setMargin(new java.awt.Insets(2, 2, 2, 2)); btnConnect.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnConnectActionPerformed(evt); } }); btnCancel.setText("Cancel"); btnCancel.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); btnCancel.setMargin(new java.awt.Insets(2, 2, 2, 2)); btnCancel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnCancelActionPerformed(evt); } }); btnRegister.setText("Register new user..."); btnRegister.setToolTipText("XMage now supports user authentication.
Register your account before you log in."); btnRegister.setMargin(new java.awt.Insets(2, 2, 2, 2)); btnRegister.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnRegisterActionPerformed(evt); } }); btnForgotPassword.setText("Forgot password..."); btnForgotPassword.setToolTipText("You can reset your password if you have registered
your account with an email address."); btnForgotPassword.setMargin(new java.awt.Insets(2, 2, 2, 2)); btnForgotPassword.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnForgotPasswordActionPerformed(evt); } }); btnFind1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/flags/de.png"))); // NOI18N btnFind1.setText("X"); btnFind1.setToolTipText("Connect to xmage.de (Europe, most popular)"); btnFind1.setActionCommand("connectXmageDe"); btnFind1.setAlignmentY(0.0F); btnFind1.setMargin(new java.awt.Insets(2, 2, 2, 2)); btnFind1.setMaximumSize(new java.awt.Dimension(42, 23)); btnFind1.setMinimumSize(new java.awt.Dimension(42, 23)); btnFind1.setName("connectXmageDeBtn"); // NOI18N btnFind1.setPreferredSize(new java.awt.Dimension(23, 23)); btnFind1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { connectXmageDe(evt); } }); btnFind2.setText("L"); btnFind2.setToolTipText("Connect to localhost (local server)"); btnFind2.setActionCommand("connectLocalhost"); btnFind2.setAlignmentY(0.0F); btnFind2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); btnFind2.setMargin(new java.awt.Insets(2, 2, 2, 2)); btnFind2.setName("connectLocalhostBtn"); // NOI18N btnFind2.setPreferredSize(new java.awt.Dimension(23, 23)); btnFind2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { connectLocalhost(evt); } }); btnFind3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/flags/us.png"))); // NOI18N btnFind3.setText("W"); btnFind3.setToolTipText("Connect to Woogerworks (USA)"); btnFind3.setActionCommand("connectWoogerworks"); btnFind3.setAlignmentY(0.0F); btnFind3.setMargin(new java.awt.Insets(2, 2, 2, 2)); btnFind3.setName("connectWoogerworksBtn"); // NOI18N btnFind3.setPreferredSize(new java.awt.Dimension(23, 23)); btnFind3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { connectWoogerworks(evt); } }); lblFastConnect.setLabelFor(btnFind1); lblFastConnect.setText("Fast connect to:"); lblFastConnect.setName(""); // NOI18N panelFlag.setPreferredSize(new java.awt.Dimension(189, 30)); panelFlag.setLayout(new javax.swing.BoxLayout(panelFlag, javax.swing.BoxLayout.LINE_AXIS)); cbFlag.setEditable(true); cbFlag.setMaximumRowCount(16); cbFlag.setAlignmentX(0.0F); cbFlag.setMinimumSize(new java.awt.Dimension(50, 18)); cbFlag.setPreferredSize(new java.awt.Dimension(278, 15)); panelFlag.add(cbFlag); panelFlag.add(filler1); btnFlagSearch.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/search_24.png"))); // NOI18N btnFlagSearch.setToolTipText("Fast search your flag"); btnFlagSearch.setAlignmentX(1.0F); btnFlagSearch.setPreferredSize(new java.awt.Dimension(23, 23)); btnFlagSearch.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnFlagSearchActionPerformed(evt); } }); panelFlag.add(btnFlagSearch); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(29, 29, 29) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(lblPort) .addComponent(lblServer))) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addComponent(lblFlag))) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lblUserName) .addComponent(lblPassword, javax.swing.GroupLayout.Alignment.TRAILING)))) .addGap(0, 0, 0) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(btnConnect, 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.LEADING, false) .addComponent(btnRegister, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(btnForgotPassword, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btnCancel, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(lblStatus, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(chkForceUpdateDB, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addComponent(jProxySettingsButton) .addGap(0, 0, Short.MAX_VALUE)) .addComponent(chkAutoConnect, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(panelFlag, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(txtServer, javax.swing.GroupLayout.Alignment.LEADING) .addComponent(txtUserName, javax.swing.GroupLayout.Alignment.LEADING) .addComponent(txtPassword, javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(txtPort, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 11, Short.MAX_VALUE) .addComponent(lblFastConnect) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btnFind1, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btnFind3, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btnFind2, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGap(0, 0, 0) .addComponent(btnFind))) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(lblServer) .addComponent(txtServer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(btnFind)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(txtPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lblPort) .addComponent(btnFind1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(btnFind2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(btnFind3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lblFastConnect)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(txtUserName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lblUserName)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(txtPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lblPassword)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(panelFlag, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lblFlag, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(chkAutoConnect) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(chkForceUpdateDB) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jProxySettingsButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(lblStatus, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addGroup(layout.createSequentialGroup() .addComponent(btnRegister, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btnForgotPassword, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addComponent(btnConnect, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(btnCancel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGap(23, 23, 23)) ); pack(); }//
//GEN-END:initComponents private void btnCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelActionPerformed MageFrame.getPreferences().put("autoConnect", Boolean.toString(chkAutoConnect.isSelected())); MageFrame.getPreferences().put(KEY_CONNECT_FLAG, ((CountryItemEditor) cbFlag.getEditor()).getImageItem()); if (task != null && !task.isDone()) { task.cancel(true); } else { this.hideDialog(); } }//GEN-LAST:event_btnCancelActionPerformed private void btnConnectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnConnectActionPerformed if (txtServer.getText().trim().isEmpty()) { JOptionPane.showMessageDialog(rootPane, "Please provide a server address"); return; } if (txtPort.getText().trim().isEmpty()) { JOptionPane.showMessageDialog(rootPane, "Please provide a port number"); return; } if (txtUserName.getText().isEmpty()) { JOptionPane.showMessageDialog(rootPane, "Please provide a user name"); return; } // txtPassword is not checked here, because authentication might be disabled by the server config. if (Integer.valueOf(txtPort.getText()) < 1 || Integer.valueOf(txtPort.getText()) > 65535) { JOptionPane.showMessageDialog(rootPane, "Invalid port number"); txtPort.setText(Integer.toString(MagePreferences.getServerPortWithDefault(Config.port))); return; } char[] input = new char[0]; try { setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); connection = new Connection(); connection.setHost(this.txtServer.getText().trim()); connection.setPort(Integer.valueOf(this.txtPort.getText().trim())); connection.setUsername(this.txtUserName.getText().trim()); connection.setPassword(this.txtPassword.getText().trim()); connection.setForceDBComparison(this.chkForceUpdateDB.isSelected()); String allMAC = ""; try { allMAC = connection.getMAC(); } catch (SocketException ex) { } connection.setUserIdStr(System.getProperty("user.name") + ":" + System.getProperty("os.name") + ":" + MagePreferences.getUserNames() + ":" + allMAC); MageFrame.getPreferences().put(KEY_CONNECT_FLAG, ((CountryItemEditor) cbFlag.getEditor()).getImageItem()); PreferencesDialog.setProxyInformation(connection); // pref settings MageFrame.getInstance().setUserPrefsToConnection(connection); logger.debug("connecting: " + connection.getProxyType() + ' ' + connection.getProxyHost() + ' ' + connection.getProxyPort()); task = new ConnectTask(); task.execute(); } finally { Arrays.fill(input, '0'); } }//GEN-LAST:event_btnConnectActionPerformed private class ConnectTask extends SwingWorker { private boolean result = false; private static final int CONNECTION_TIMEOUT_MS = 2100; @Override protected Boolean doInBackground() throws Exception { lblStatus.setText("Connecting..."); btnConnect.setEnabled(false); result = MageFrame.connect(connection); return result; } @Override protected void done() { try { get(CONNECTION_TIMEOUT_MS, TimeUnit.MILLISECONDS); setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); if (result) { lblStatus.setText(""); connected(); MageFrame.getInstance().prepareAndShowTablesPane(); } else { lblStatus.setText("Could not connect"); } } catch (InterruptedException ex) { logger.fatal("Update Players Task error", ex); } catch (ExecutionException ex) { logger.fatal("Update Players Task error", ex); } catch (CancellationException ex) { logger.info("Connect was canceled"); lblStatus.setText("Connect was canceled"); } catch (TimeoutException ex) { logger.fatal("Connection timeout: ", ex); } finally { MageFrame.stopConnecting(); btnConnect.setEnabled(true); } } } private void connected() { this.saveSettings(); this.hideDialog(); ConstructedFormats.ensureLists(); } private void keyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_keyTyped char c = evt.getKeyChar(); if (!Character.isDigit(c)) { evt.consume(); } }//GEN-LAST:event_keyTyped private void chkAutoConnectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkAutoConnectActionPerformed // TODO add your handling code here: }//GEN-LAST:event_chkAutoConnectActionPerformed private void findPublicServerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed BufferedReader in = null; try { String serverUrl = PreferencesDialog.getCachedValue(KEY_CONNECTION_URL_SERVER_LIST, "http://xmage.de/files/server-list.txt"); if (serverUrl.contains("xmage.info/files/")) { serverUrl = serverUrl.replace("xmage.info/files/", "xmage.de/files/"); // replace old URL if still saved PreferencesDialog.saveValue(KEY_CONNECTION_URL_SERVER_LIST, serverUrl); } URL serverListURL = new URL(serverUrl); Connection.ProxyType configProxyType = Connection.ProxyType.valueByText(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_PROXY_TYPE, "None")); Proxy p = null; Proxy.Type type = Proxy.Type.DIRECT; switch (configProxyType) { case HTTP: type = Proxy.Type.HTTP; break; case SOCKS: type = Proxy.Type.SOCKS; break; case NONE: default: p = Proxy.NO_PROXY; break; } if (p == null || !p.equals(Proxy.NO_PROXY)) { try { String address = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_PROXY_ADDRESS, ""); Integer port = Integer.parseInt(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_PROXY_PORT, "80")); p = new Proxy(type, new InetSocketAddress(address, port)); } catch (Exception ex) { throw new RuntimeException("Gui_DownloadPictures : error 1 - " + ex); } } if (p == null) { JOptionPane.showMessageDialog(null, "Couldn't configure Proxy object!", "Error", JOptionPane.ERROR_MESSAGE); return; } boolean URLNotFound = false; try { in = new BufferedReader(new InputStreamReader(serverListURL.openConnection(p).getInputStream())); } catch (SocketTimeoutException | FileNotFoundException | UnknownHostException ex) { logger.warn("Could not read serverlist from: " + serverListURL.toString()); File f = new File("serverlist.txt"); if (f.exists() && !f.isDirectory()) { logger.info("Using buffered serverlist: serverlist.txt"); URLNotFound = true; in = new BufferedReader(new FileReader("serverlist.txt")); } } List servers = new ArrayList<>(); if (in != null) { Writer output = null; if (!URLNotFound) { // write serverlist to be able to read if URL is not available File file = new File("serverlist.txt"); if (file.exists() && !file.isDirectory()) { file.delete(); } output = new BufferedWriter(new FileWriter(file)); } String inputLine; while ((inputLine = in.readLine()) != null) { logger.debug("Found server: " + inputLine); servers.add(inputLine); if (output != null) { output.append(inputLine).append('\n'); } } if (output != null) { output.close(); } in.close(); } if (servers.isEmpty()) { JOptionPane.showMessageDialog(null, "Couldn't find any server."); return; } String selectedServer = (String) JOptionPane.showInputDialog(null, "Choose XMage Public Server:", "Input", JOptionPane.INFORMATION_MESSAGE, null, servers.toArray(), servers.get(0)); if (selectedServer != null) { String[] params = selectedServer.split(":"); if (params.length == 3) { String serverAddress = params[1]; this.txtServer.setText(serverAddress); this.txtPort.setText(params[2]); // Update userName and password according to the chosen server. this.txtUserName.setText(MagePreferences.getUserName(serverAddress)); this.txtPassword.setText(MagePreferences.getPassword(serverAddress)); } else { JOptionPane.showMessageDialog(null, "Wrong server data format."); } } } catch (Exception ex) { logger.error(ex, ex); } finally { if (in != null) { try { in.close(); } catch (Exception e) { } } } }//GEN-LAST:event_jButton1ActionPerformed private void jProxySettingsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jProxySettingsButtonActionPerformed PreferencesDialog.main(new String[]{PreferencesDialog.OPEN_CONNECTION_TAB}); }//GEN-LAST:event_jProxySettingsButtonActionPerformed private void chkForceUpdateDBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkForceUpdateDBActionPerformed // TODO add your handling code here: }//GEN-LAST:event_chkForceUpdateDBActionPerformed private void txtUserNameActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtUserNameActionPerformed // TODO add your handling code here: }//GEN-LAST:event_txtUserNameActionPerformed private void txtPasswordActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtPasswordActionPerformed // TODO add your handling code here: }//GEN-LAST:event_txtPasswordActionPerformed private void btnRegisterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRegisterActionPerformed registerUserDialog.showDialog(); }//GEN-LAST:event_btnRegisterActionPerformed private void btnForgotPasswordActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnForgotPasswordActionPerformed resetPasswordDialog.showDialog(); }//GEN-LAST:event_btnForgotPasswordActionPerformed private void connectXmageDe(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnFind1findPublicServerActionPerformed String serverAddress = "xmage.de"; this.txtServer.setText(serverAddress); this.txtPort.setText("17171"); // Update userName and password according to the chosen server. this.txtUserName.setText(MagePreferences.getUserName(serverAddress)); this.txtPassword.setText(MagePreferences.getPassword(serverAddress)); }//GEN-LAST:event_btnFind1findPublicServerActionPerformed private void connectLocalhost(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnFind2findPublicServerActionPerformed String serverAddress = "localhost"; this.txtServer.setText(serverAddress); this.txtPort.setText("17171"); // Update userName and password according to the chosen server. this.txtUserName.setText(MagePreferences.getUserName(serverAddress)); this.txtPassword.setText(MagePreferences.getPassword(serverAddress)); }//GEN-LAST:event_btnFind2findPublicServerActionPerformed private void connectWoogerworks(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_connectWoogerworks String serverAddress = "xmage.woogerworks.com"; this.txtServer.setText(serverAddress); this.txtPort.setText("17171"); // Update userName and password according to the chosen server. this.txtUserName.setText(MagePreferences.getUserName(serverAddress)); this.txtPassword.setText(MagePreferences.getPassword(serverAddress)); }//GEN-LAST:event_connectWoogerworks private void btnFlagSearchActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnFlagSearchActionPerformed doFastFlagSearch(); }//GEN-LAST:event_btnFlagSearchActionPerformed private void doFastFlagSearch(){ Choice choice = new ChoiceImpl(false); Map choiceItems = new LinkedHashMap<>(); DefaultComboBoxModel flagModel = (DefaultComboBoxModel)cbFlag.getModel(); String[] flagItem; for(int i = 0; i < flagModel.getSize() - 1; i++){ flagItem = (String[])flagModel.getElementAt(i); choiceItems.put(flagItem[1], flagItem[0]); } choice.setKeyChoices(choiceItems); choice.setMessage("Select your coutry"); // current selection restore String needSelectValue = null; flagItem = (String[])flagModel.getSelectedItem(); if (flagItem != null){ needSelectValue = flagItem[1]; } PickChoiceDialog dlg = new PickChoiceDialog(); dlg.showDialog(choice, needSelectValue); if(choice.isChosen()){ flagItem = new String[2]; flagItem[0] = choice.getChoiceValue(); flagItem[1] = choice.getChoiceKey(); flagModel.setSelectedItem(flagItem); } } public String getServer() { return this.txtServer.getText(); } public String getPort() { return this.txtPort.getText(); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton btnCancel; private javax.swing.JButton btnConnect; private javax.swing.JButton btnFind; private javax.swing.JButton btnFind1; private javax.swing.JButton btnFind2; private javax.swing.JButton btnFind3; private javax.swing.JButton btnFlagSearch; private javax.swing.JButton btnForgotPassword; private javax.swing.JButton btnRegister; private mage.client.util.gui.countryBox.CountryComboBox cbFlag; private javax.swing.JCheckBox chkAutoConnect; private javax.swing.JCheckBox chkForceUpdateDB; private javax.swing.Box.Filler filler1; private javax.swing.JButton jProxySettingsButton; private javax.swing.JLabel lblFastConnect; private javax.swing.JLabel lblFlag; private javax.swing.JLabel lblPassword; private javax.swing.JLabel lblPort; private javax.swing.JLabel lblServer; private javax.swing.JLabel lblStatus; private javax.swing.JLabel lblUserName; private javax.swing.JPanel panelFlag; private javax.swing.JPasswordField txtPassword; private javax.swing.JTextField txtPort; private javax.swing.JTextField txtServer; private javax.swing.JTextField txtUserName; // End of variables declaration//GEN-END:variables }