Author: toad
Date: 2007-12-06 22:37:47 +0000 (Thu, 06 Dec 2007)
New Revision: 16376

Modified:
   trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties
   trunk/freenet/src/freenet/node/Announcer.java
   trunk/freenet/src/freenet/node/PeerManager.java
Log:
Announcement user-alert

Modified: trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties
===================================================================
--- trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties   2007-12-06 
21:59:03 UTC (rev 16375)
+++ trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties   2007-12-06 
22:37:47 UTC (rev 16376)
@@ -1,4 +1,9 @@
 testing.test=test$(test1)test$(test2)test
+Announcer.announceAlertIntro=The node is currently attempting to connect to 
seednodes and announce itself to the opennet (Strangers network). This may take 
a few minutes.
+Announcer.announceAlertTitle=Node Announcing
+Announcer.announceDetails=We have recently sent ${recentSentAnnouncements} 
announcements, ${runningAnnouncements} of which are still running, and added 
${addedNodes} nodes (${refusedNodes} nodes have rejected us). We are currently 
connected to ${connectedSeednodes} seednodes and trying to connect to another 
${disconnectedSeednodes}.
+Announcer.announceAlertNoSeednodes=There is no seednodes.fref file found, so 
the node will not be able to automatically bootstrap itself onto the opennet. 
Please add some nodes manually.
+Announcer.announceLoading=The node is currently loading the seednodes file so 
that it can attempt to announce to the rest of the network. Announcement may 
take a few minutes.
 BookmarkEditorToadlet.addBookmark=Add Bookmark
 BookmarkEditorToadlet.addCategory=Add Category
 BookmarkEditorToadlet.addNewBookmark=Add a new bookmark

Modified: trunk/freenet/src/freenet/node/Announcer.java
===================================================================
--- trunk/freenet/src/freenet/node/Announcer.java       2007-12-06 21:59:03 UTC 
(rev 16375)
+++ trunk/freenet/src/freenet/node/Announcer.java       2007-12-06 22:37:47 UTC 
(rev 16376)
@@ -16,6 +16,9 @@

 import freenet.io.comm.PeerParseException;
 import freenet.io.comm.ReferenceSignatureVerificationException;
+import freenet.l10n.L10n;
+import freenet.node.useralerts.UserAlert;
+import freenet.support.HTMLNode;
 import freenet.support.Logger;
 import freenet.support.SimpleFieldSet;
 import freenet.support.io.Closer;
@@ -95,8 +98,7 @@
        }

        private void registerAlert() {
-               // TODO Auto-generated method stub
-               
+               node.clientCore.alerts.register(new AnnouncementUserAlert());
        }

        private void connectSomeSeednodes() {
@@ -174,15 +176,21 @@
        public void stop() {
                // Do nothing at present
        }
-
-       public void maybeSendAnnouncement() {
+       
+       /** @return True if we have enough peers that we don't need to 
announce. */
+       boolean enoughPeers() {
                // Do we want to send an announcement to the node?
                int opennetCount = node.peers.countConnectedOpennetPeers();
                // First, do we actually need to announce?
-               if(opennetCount > MIN_OPENNET_CONNECTED_PEERS) {
-                       return;
+               if(opennetCount > Math.min(MIN_OPENNET_CONNECTED_PEERS, 
om.getNumberOfConnectedPeersToAim())) {
+                       return true;
                }
+               return false;
+       }
+
+       public void maybeSendAnnouncement() {
                long now = System.currentTimeMillis();
+               if(enoughPeers()) return;
                synchronized(this) {
                        // Second, do we have many announcements running?
                        if(runningAnnouncements > WANT_ANNOUNCEMENTS) {
@@ -294,4 +302,107 @@
                node.executor.execute(sender, "Announcer to "+seed);
        }

+       public class AnnouncementUserAlert implements UserAlert {
+
+               public String dismissButtonText() {
+                       return L10n.getString("UserAlert.hide");
+               }
+
+               public HTMLNode getHTMLText() {
+                       return new HTMLNode("#", getText());
+               }
+
+               public short getPriorityClass() {
+                       return UserAlert.MINOR;
+               }
+
+               public String getText() {
+                       StringBuffer sb = new StringBuffer();
+                       sb.append(l10n("announceAlertIntro"));
+                       int status;
+                       synchronized(this) {
+                               status = Announcer.this.status;
+                       }
+                       if(status == STATUS_NO_SEEDNODES) {
+                               return l10n("announceAlertNoSeednodes");
+                       }
+                       if(status == STATUS_LOADING) {
+                               return l10n("announceLoading");
+                       }
+                       if(node.clientCore.isAdvancedModeEnabled()) {
+                               // Detail
+                               sb.append(' ');
+                               int addedNodes;
+                               int refusedNodes;
+                               int recentSentAnnouncements;
+                               int runningAnnouncements;
+                               int connectedSeednodes = 0;
+                               int disconnectedSeednodes = 0;
+                               synchronized(this) {
+                                       addedNodes = announcementAddedNodes;
+                                       refusedNodes = 
announcementNotWantedNodes;
+                                       recentSentAnnouncements = 
sentAnnouncements;
+                                       runningAnnouncements = 
Announcer.this.runningAnnouncements;
+                               }
+                               Vector nodes = 
node.peers.getSeedServerPeersVector(null);
+                               for(int i=0;i<nodes.size();i++) {
+                                       SeedServerPeerNode seed = 
(SeedServerPeerNode) nodes.get(i);
+                                       if(seed.isConnected())
+                                               connectedSeednodes++;
+                                       else
+                                               disconnectedSeednodes++;
+                               }
+                               sb.append(l10n("announceDetails", 
+                                               new String[] { "addedNodes", 
"refusedNodes", "recentSentAnnouncements", "runningAnnouncements", 
"connectedSeednodes", "disconnectedSeednodes" },
+                                               new String[] {
+                                               Integer.toString(addedNodes),
+                                               Integer.toString(refusedNodes),
+                                               
Integer.toString(recentSentAnnouncements),
+                                               
Integer.toString(runningAnnouncements),
+                                               
Integer.toString(connectedSeednodes),
+                                               
Integer.toString(disconnectedSeednodes)
+                               }));
+                       }
+                       // TODO Auto-generated method stub
+                       return null;
+               }
+
+               public String getTitle() {
+                       return l10n("announceAlertTitle");
+               }
+
+               public Object getUserIdentifier() {
+                       return null;
+               }
+
+               public boolean isValid() {
+                       return !enoughPeers();
+               }
+
+               public void isValid(boolean validity) {
+                       // Ignore
+               }
+
+               public void onDismiss() {
+                       // Ignore
+               }
+
+               public boolean shouldUnregisterOnDismiss() {
+                       return true;
+               }
+
+               public boolean userCanDismiss() {
+                       return true;
+               }
+
+       }
+       
+       private String l10n(String key) {
+               return L10n.getString("Announcer."+key);
+       }
+
+       public String l10n(String key, String[] patterns, String[] values) {
+               return L10n.getString(key, patterns, values);
+       }
+
 }

Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java     2007-12-06 21:59:03 UTC 
(rev 16375)
+++ trunk/freenet/src/freenet/node/PeerManager.java     2007-12-06 22:37:47 UTC 
(rev 16376)
@@ -1334,7 +1334,7 @@
                Vector v = new Vector(myPeers.length);
                for(int i=0;i<peers.length;i++) {
                        if(peers[i] instanceof SeedServerPeerNode) {
-                               if(exclude.contains(peers[i].getIdentity())) 
continue;
+                               if(exclude != null && 
exclude.contains(peers[i].getIdentity())) continue;
                                v.add(peers[i]);
                        }
                }


Reply via email to