Author: jflesch
Date: 2007-01-27 16:35:10 +0000 (Sat, 27 Jan 2007)
New Revision: 11624
Modified:
trunk/apps/Thaw/src/thaw/core/ConfigWindow.java
trunk/apps/Thaw/src/thaw/core/Core.java
trunk/apps/Thaw/src/thaw/core/MainWindow.java
trunk/apps/Thaw/src/thaw/fcp/FCPClientHello.java
trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java
trunk/apps/Thaw/src/thaw/i18n/thaw.properties
trunk/apps/Thaw/src/thaw/plugins/StatusBar.java
trunk/apps/Thaw/src/thaw/plugins/index/AutoRefresh.java
Log:
Fix reconnection process
Modified: trunk/apps/Thaw/src/thaw/core/ConfigWindow.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/ConfigWindow.java 2007-01-26 22:47:54 UTC
(rev 11623)
+++ trunk/apps/Thaw/src/thaw/core/ConfigWindow.java 2007-01-27 16:35:10 UTC
(rev 11624)
@@ -206,7 +206,7 @@
/* should reinit the whole connection correctly */
core.getPluginManager().stopPlugins();
- if (resetConnection && !core.initNodeConnection()) {
+ if (resetConnection && !core.initConnection()) {
new WarningWindow(core,
I18n.getMessage("thaw.warning.unableToConnectTo")+ "
"+core.getConfig().getValue("nodeAddress")+":"+
core.getConfig().getValue("nodePort"));
}
Modified: trunk/apps/Thaw/src/thaw/core/Core.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/Core.java 2007-01-26 22:47:54 UTC (rev
11623)
+++ trunk/apps/Thaw/src/thaw/core/Core.java 2007-01-27 16:35:10 UTC (rev
11624)
@@ -47,7 +47,9 @@
public final static int MAX_CONNECT_TRIES = 3;
public final static int TIME_BETWEEN_EACH_TRY = 5000;
+ private ReconnectionManager reconnectionManager = null;
+
/**
* Creates a core, but do nothing else (no initialization).
*/
@@ -111,7 +113,7 @@
splashScreen.setProgressionAndStatus(10, "Connecting ...");
splashScreen.addIcon(IconBox.connectAction);
- if(!initNodeConnection())
+ if(!initConnection())
new WarningWindow(this,
I18n.getMessage("thaw.warning.unableToConnectTo")+
" "+ config.getValue("nodeAddress")+
":"+ config.getValue("nodePort"));
@@ -159,16 +161,20 @@
* if you called canDisconnect() before, then this function can be
called safely.
* @see #canDisconnect()
*/
- public boolean initNodeConnection() {
- if(getMainWindow() != null)
-
getMainWindow().setStatus(I18n.getMessage("thaw.statusBar.connecting"));
+ public boolean initConnection() {
+ boolean ret = true;
+ if(getMainWindow() != null) {
+
getMainWindow().setStatus(I18n.getMessage("thaw.statusBar.connecting"),
java.awt.Color.RED);
+
+ }
+
try {
if(queueManager != null)
queueManager.stopScheduler();
if((connection != null) && connection.isConnected()) {
- disconnect();
+ subDisconnect();
}
if(connection == null) {
@@ -177,7 +183,8 @@
Integer.parseInt(config.getValue("maxUploadSpeed")),
Boolean.valueOf(config.getValue("multipleSockets")).booleanValue(),
Boolean.valueOf(config.getValue("sameComputer")).booleanValue());
- } else { /* connection is not recreate to avoid
troubles with observer etc */
+ } else { /* connection is not recreate to avoid
troubles with possible observers etc */
+ connection.deleteObserver(this);
connection.setNodeAddress(config.getValue("nodeAddress"));
connection.setNodePort(Integer.parseInt(config.getValue("nodePort")));
connection.setMaxUploadSpeed(Integer.parseInt(config.getValue("maxUploadSpeed")));
@@ -187,6 +194,7 @@
if(!connection.connect()) {
Logger.warning(this, "Unable to connect !");
+ ret = false;
}
if(queryManager == null)
@@ -207,7 +215,7 @@
- if(connection.isConnected()) {
+ if(ret && connection.isConnected()) {
queryManager.startListening();
QueueKeeper.loadQueue(queueManager,
"thaw.queue.xml");
@@ -217,9 +225,8 @@
if(!clientHello.start(null)) {
Logger.warning(this, "Id already used
!");
- connection.disconnect();
- new WarningWindow(this, "Unable to
connect to "+config.getValue("nodeAddress")+":"+config.getValue("nodePort"));
- return false;
+ subDisconnect();
+ ret = false;
} else {
Logger.debug(this, "Hello successful");
Logger.debug(this, "Node name :
"+clientHello.getNodeName());
@@ -237,23 +244,25 @@
queueLoader.start(queueManager);
}
+ }
- } else
- return false;
-
} catch(final Exception e) { /* A little bit not ... "nice" ...
*/
Logger.warning(this, "Exception while connecting :
"+e.toString()+" ; "+e.getMessage() + " ; "+e.getCause());
e.printStackTrace();
return false;
}
- if(connection.isConnected())
+ if(ret && connection.isConnected())
connection.addObserver(this);
- if(getMainWindow() != null)
-
getMainWindow().setStatus(I18n.getMessage("thaw.statusBar.ready"));
+ if(getMainWindow() != null) {
+ if (ret)
+
getMainWindow().setStatus(I18n.getMessage("thaw.statusBar.ready"));
+ else
+
getMainWindow().setStatus(I18n.getMessage("thaw.statusBar.disconnected"));
+ }
- return true;
+ return ret;
}
@@ -347,13 +356,30 @@
* Makes things nicely ... :)
*/
public void disconnect() {
+ if (reconnectionManager != null) {
+ reconnectionManager.stop();
+ reconnectionManager = null;
+ }
+
+ subDisconnect();
+ }
+
+
+ public void subDisconnect() {
Logger.info(this, "Disconnecting");
- connection.deleteObserver(this);
- connection.disconnect();
- Logger.info(this, "Saving queue state");
- QueueKeeper.saveQueue(queueManager, "thaw.queue.xml");
+ if (mainWindow != null) {
+
mainWindow.setStatus(I18n.getMessage("thaw.statusBar.disconnected"),
java.awt.Color.RED);
+ }
+ if (connection != null) {
+ connection.deleteObserver(this);
+ connection.disconnect();
+ Logger.info(this, "Saving queue state");
+ QueueKeeper.saveQueue(queueManager, "thaw.queue.xml");
+ } else {
+ Logger.warning(this, "No connection ?!");
+ }
}
/**
@@ -365,7 +391,7 @@
/**
* End of the world.
- * @param force if true, doesn't check if FCPConnection.isWritting().
+ * @param force if true, doesn't check if FCPConnection.isWriting().
* @see #exit()
*/
public void exit(boolean force) {
@@ -416,98 +442,78 @@
}
- protected class UnwantedDisconnectionManager implements Runnable,
ActionListener {
- private JDialog warningDialog = null;
+ protected class ReconnectionManager implements Runnable {
+ private boolean running = true;
+ public ReconnectionManager() {
+ running = true;
+ }
+
public void run() {
- disconnect();
+ Logger.notice(this, "Starting reconnection process !");
- int nmbReconnect = 0;
+
getMainWindow().setStatus(I18n.getMessage("thaw.statusBar.connecting"),
java.awt.Color.RED);
+ getPluginManager().stopPlugins(); /* don't forget there
is the status bar plugin */
+
getMainWindow().setStatus(I18n.getMessage("thaw.statusBar.connecting"),
java.awt.Color.RED);
- if (getMainWindow() != null) /* disconnection can
happen when starting */
- warningDialog = new
JDialog(getMainWindow().getMainFrame());
- else
- warningDialog = new JDialog();
- warningDialog.setTitle("Thaw - reconnection");
- warningDialog.setModal(false);
- warningDialog.setSize(500, 100);
-
warningDialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+ subDisconnect();
- final JPanel warningPanel = new JPanel(new
BorderLayout(10, 10));
- final JLabel warningLabel = new
JLabel(I18n.getMessage("thaw.warning.autoreconnecting"),
-
SwingConstants.CENTER);
- final JButton cancelButton = new
JButton(I18n.getMessage("thaw.common.cancel"));
- cancelButton.addActionListener(this);
-
- warningPanel.add(warningLabel, BorderLayout.CENTER);
- warningPanel.add(cancelButton, BorderLayout.SOUTH);
- warningDialog.setContentPane(warningPanel);
-
- warningDialog.setVisible(true);
-
- for(nmbReconnect = 0;
- nmbReconnect < Core.MAX_CONNECT_TRIES &&
warningDialog != null ;
- nmbReconnect++) {
-
+ while(running) {
try {
Thread.sleep(Core.TIME_BETWEEN_EACH_TRY);
} catch(final java.lang.InterruptedException e)
{
// brouzouf
}
- Logger.notice(this, "Trying to reconnect ... :
"+ Integer.toString(nmbReconnect));
- if (warningDialog != null) {
- if(initNodeConnection())
- break;
- }
+ Logger.notice(this, "Trying to reconnect ...");
+ if(initConnection())
+ break;
}
- if (warningDialog != null) {
- warningDialog.setVisible(false);
- warningDialog.dispose();
+ if (running) {
+
getMainWindow().setStatus(I18n.getMessage("thaw.statusBar.ready"));
+ } else {
+
getMainWindow().setStatus(I18n.getMessage("thaw.statusBar.disconnected"),
java.awt.Color.RED);
}
+ getPluginManager().loadPlugins();
+ getPluginManager().runPlugins();
- if(nmbReconnect == Core.MAX_CONNECT_TRIES) {
- while(!initNodeConnection()) {
- final int ret =
JOptionPane.showOptionDialog((java.awt.Component)null,
-
I18n.getMessage("thaw.warning.disconnected"),
-
"Thaw - "+I18n.getMessage("thaw.warning.title"),
-
JOptionPane.YES_NO_OPTION,
-
JOptionPane.WARNING_MESSAGE,
-
(javax.swing.Icon)null,
-
(java.lang.Object[])null,
-
(java.lang.Object)null);
- if((ret == JOptionPane.CLOSED_OPTION)
- || (ret == JOptionPane.CANCEL_OPTION)
- || (ret == JOptionPane.NO_OPTION))
- break;
- }
+ reconnectionManager = null;
- }
+ getMainWindow().connectionHasChanged();
+ }
- getPluginManager().stopPlugins();
- getPluginManager().loadPlugins();
- getPluginManager().runPlugins();
+ public void stop() {
+ Logger.warning(this, "Canceling reconnection ...");
+ running = false;
}
+ }
- public void actionPerformed(ActionEvent e) {
- if (warningDialog == null)
- return;
- // we assume that the action comes from the button in
the reconnection dialog
- warningDialog.setVisible(false);
- warningDialog.dispose();
- warningDialog = null;
+ /**
+ * use Thread => will also do all the work related to the plugins
+ */
+ public void reconnect() {
+ if (reconnectionManager == null) {
+ reconnectionManager = new ReconnectionManager();
+ Thread th = new Thread(reconnectionManager);
+ th.start();
+ } else {
+ Logger.warning(this, "Already trying to reconnect !");
}
}
+ public boolean isReconnecting() {
+ return (reconnectionManager != null);
+ }
+
+
public void update(final Observable o, final Object target) {
Logger.debug(this, "Move on the connection (?)");
if((o == connection) && !connection.isConnected()) {
- Thread th = new Thread(new
UnwantedDisconnectionManager());
- th.run();
+ reconnect();
}
}
Modified: trunk/apps/Thaw/src/thaw/core/MainWindow.java
===================================================================
--- trunk/apps/Thaw/src/thaw/core/MainWindow.java 2007-01-26 22:47:54 UTC
(rev 11623)
+++ trunk/apps/Thaw/src/thaw/core/MainWindow.java 2007-01-27 16:35:10 UTC
(rev 11624)
@@ -201,6 +201,12 @@
}
+ public void connectionHasChanged() {
+ core.getConnectionManager().addObserver(this);
+ }
+
+
+
/**
* Make the window visible or not.
*/
@@ -385,12 +391,7 @@
*/
public void actionPerformed(final ActionEvent e) {
if(e.getSource() == connectButton) {
- core.getPluginManager().stopPlugins();
-
- if(!core.initNodeConnection())
- unableToConnect();
-
- core.getPluginManager().runPlugins();
+ core.reconnect();
}
if(e.getSource() == disconnectButton) {
@@ -400,9 +401,7 @@
}
core.getPluginManager().stopPlugins();
-
core.disconnect();
-
core.getPluginManager().runPlugins();
}
@@ -421,14 +420,7 @@
return;
}
- core.getPluginManager().stopPlugins();
-
- if(!core.initNodeConnection())
- unableToConnect();
-
- core.getPluginManager().loadPlugins();
- core.getPluginManager().runPlugins();
-
+ core.reconnect();
}
if(e.getSource() == optionsFileMenuItem) {
@@ -490,15 +482,22 @@
}
+ public void setStatus(final String status) {
+ setStatus(status, java.awt.Color.BLACK);
+ }
+
+
/**
* Change text in the status bar.
* @param status Null is accepted.
*/
- public void setStatus(final String status) {
+ public void setStatus(final String status, java.awt.Color color) {
if(status != null)
statusBar.setText(status);
else
statusBar.setText(" ");/* not empty else the status bar
disappear */
+
+ statusBar.setForeground(color);
}
Modified: trunk/apps/Thaw/src/thaw/fcp/FCPClientHello.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPClientHello.java 2007-01-26 22:47:54 UTC
(rev 11623)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPClientHello.java 2007-01-27 16:35:10 UTC
(rev 11624)
@@ -12,7 +12,7 @@
* and start() returns false.
*/
public class FCPClientHello implements FCPQuery, Observer {
- public final static int NODEHELLO_TIMEOUT = 20; /* in seconds */
+ public final static int NODEHELLO_TIMEOUT = 30; /* in seconds */
private final static String FCP_EXPECTED_VERSION = "2.0";
private String id;
@@ -94,7 +94,6 @@
Logger.info(this, "Hello "+nodeName+", I'm Thaw :)");
} else {
Logger.warning(this, "Unable to connect, ID is probably
already taken or there was a timeout");
- queryManager.getConnection().disconnect();
return false;
}
Modified: trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java
===================================================================
--- trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java 2007-01-26 22:47:54 UTC
(rev 11623)
+++ trunk/apps/Thaw/src/thaw/fcp/FCPQueueManager.java 2007-01-27 16:35:10 UTC
(rev 11624)
@@ -501,12 +501,12 @@
&& !queryManager.getConnection().isConnected()) {
/* Only the running queue ...
- * pending query are specifics to Thaw
+ * pending queries are specifics to Thaw
*/
runningQueries = new Vector();
setChanged();
- this.notifyObservers();
+ notifyObservers();
}
}
}
Modified: trunk/apps/Thaw/src/thaw/i18n/thaw.properties
===================================================================
--- trunk/apps/Thaw/src/thaw/i18n/thaw.properties 2007-01-26 22:47:54 UTC
(rev 11623)
+++ trunk/apps/Thaw/src/thaw/i18n/thaw.properties 2007-01-27 16:35:10 UTC
(rev 11624)
@@ -87,6 +87,7 @@
## Status bar
thaw.statusBar.initPlugins=Loading plugins ...
thaw.statusBar.ready=Ready
+thaw.statusBar.disconnected=DISCONNECTED
thaw.statusBar.connecting=Connecting ...
## Config
Modified: trunk/apps/Thaw/src/thaw/plugins/StatusBar.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/StatusBar.java 2007-01-26 22:47:54 UTC
(rev 11623)
+++ trunk/apps/Thaw/src/thaw/plugins/StatusBar.java 2007-01-27 16:35:10 UTC
(rev 11624)
@@ -49,6 +49,17 @@
}
public void updateStatusBar() {
+
+ if (core.isReconnecting()) {
+
core.getMainWindow().setStatus(I18n.getMessage("thaw.statusBar.connecting"),
java.awt.Color.RED);
+ return;
+ }
+
+ if (!core.getConnectionManager().isConnected()) {
+
core.getMainWindow().setStatus(I18n.getMessage("thaw.statusBar.disconnected"),
java.awt.Color.RED);
+ return;
+ }
+
int progressDone = 0;
int progressTotal = 0;
Modified: trunk/apps/Thaw/src/thaw/plugins/index/AutoRefresh.java
===================================================================
--- trunk/apps/Thaw/src/thaw/plugins/index/AutoRefresh.java 2007-01-26
22:47:54 UTC (rev 11623)
+++ trunk/apps/Thaw/src/thaw/plugins/index/AutoRefresh.java 2007-01-27
16:35:10 UTC (rev 11624)
@@ -107,7 +107,12 @@
Index index;
index = new Index(browserPanel.getDb(),
- results.getInt("id"));
+ results.getInt("id"),
+ null, results.getString("publicKey"),
+ results.getInt("revision"),
+ results.getString("privateKey"),
+ results.getString("displayName"),
+ false);
index.downloadFromFreenet(this,
browserPanel.getIndexTree(), queueManager);