Mailbox -> MailboxTree separation
[org.ibex.mail.git] / src / org / ibex / mail / Main.java
index b11584c..db9a36b 100644 (file)
@@ -19,6 +19,9 @@ import javax.net.ssl.SSLSocket;
 // restrict the maximum number of open connections from any given source IP (probably max 4)
 public class Main {
 
+    public static final ThreadPool threadPool = new ThreadPool(10);
+    public static final Cron       cron       = new Cron(threadPool);
+
     public static void main(String[] s) throws Exception {
         try {
             File f = new File(Mailbox.STORAGE_ROOT + "/restart");
@@ -44,20 +47,19 @@ public class Main {
         ServerSocket sock563  = (ServerSocket) sslserversocketfactory.createServerSocket(563);
         //ServerSocket sock995  = new ServerSocket(995);
         //ServerSocket sock113  = new ServerSocket(113);
-        new Thread() {
+
+        cron.executeLater(500, new Runnable() {
             public void run() {
-                while(true) {
-                    try { Thread.sleep(500); } catch (Exception e) { }
-                    try {
-                        File f = new File(Mailbox.STORAGE_ROOT + "/restart");
-                        if (f.exists()) {
-                            Log.error("RESTART", "restarting...");
-                            System.exit(0);
-                        }
-                    } catch (Exception e) { Log.error(this, e); }
-                }
-            }
-        }.start();
+                try {
+                    File f = new File(Mailbox.STORAGE_ROOT + "/restart");
+                    if (f.exists()) {
+                        Log.error("RESTART", "restarting...");
+                        System.exit(0);
+                    }
+                } catch (Exception e) { Log.error(this, e); }
+                cron.executeLater(500, this);
+            } });
+            
         new Acceptor(sock143).start();
         new Acceptor(sock119).start();
         new Acceptor(sock25).start();
@@ -77,13 +79,13 @@ public class Main {
                 try {
                     ss.setReuseAddress(true);
                     final Socket s = ss.accept();
-                    new Thread() {
+                    threadPool.start(new Runnable() {
                         public void run() {
                             try {
                                 accept(new Connection(s, "megacz.com"));
                             } catch (Throwable t) { Log.error(Main.class, t); }
                         }
-                    }.start();
+                    });
                 } catch (Throwable t) {
                     Log.error(Main.class, t);
                     Misc.sleep(1000);
@@ -123,7 +125,7 @@ public class Main {
                     FileBasedMailbox.getFileBasedMailbox(Mailbox.STORAGE_ROOT + "/list", false);
                 if (root==null) return null;
                 return new Account("anonymous", null, root){
-                    public Mailbox getMailbox(Class protocol) {
+                    public MailboxTree getMailbox(Class protocol) {
                         return super.getMailbox(protocol);
                     }
                 };
@@ -134,10 +136,10 @@ public class Main {
             //if (!EtcPasswd.verify(user, pass)) return null;
             //if (!CheckPassword.verify(user, pass)) return null;
             if (!ka.auth(user, pass)) return null;
-            final Mailbox root =
+            final MailboxTree root =
                 FileBasedMailbox.getFileBasedMailbox(Mailbox.STORAGE_ROOT + "/user", true);
             return new Account(user, null, root.slash(user, true)){
-                    public Mailbox getMailbox(Class protocol) {
+                    public MailboxTree getMailbox(Class protocol) {
                         return super.getMailbox(protocol);
                     }
                 };