I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
SchedulerChooser.java 2.04 KiB
package net.i2p.client.streaming;

import java.util.ArrayList;
import java.util.List;

import net.i2p.I2PAppContext;
import net.i2p.util.Log;

/**
 * Examine a connection's state and pick the right scheduler for it.
 *
 */
class SchedulerChooser {
    private I2PAppContext _context;
    private Log _log;
    private TaskScheduler _nullScheduler;
    /** list of TaskScheduler objects */
    private List _schedulers;
    
    public SchedulerChooser(I2PAppContext context) {
        _context = context;
        _log = context.logManager().getLog(SchedulerChooser.class);
        _schedulers = createSchedulers();
        _nullScheduler = new NullScheduler();
    }
    
    public TaskScheduler getScheduler(Connection con) {
        for (int i = 0; i < _schedulers.size(); i++) {
            TaskScheduler scheduler = (TaskScheduler)_schedulers.get(i);
            if (scheduler.accept(con)) {
                //if (_log.shouldLog(Log.DEBUG))
                //    _log.debug("Scheduling for " + con + " with " + scheduler.getClass().getName());
                return scheduler;
            }
        }
        return _nullScheduler;
    }
    
    private List createSchedulers() {
        List rv = new ArrayList(8);
        rv.add(new SchedulerHardDisconnected(_context));
        rv.add(new SchedulerPreconnect(_context));
        rv.add(new SchedulerConnecting(_context));
        rv.add(new SchedulerReceived(_context));
        rv.add(new SchedulerConnectedBulk(_context));
        rv.add(new SchedulerClosing(_context));
        rv.add(new SchedulerClosed(_context));
        rv.add(new SchedulerDead(_context));
        return rv;
    }
    private class NullScheduler implements TaskScheduler {
        private Log _log;
        public NullScheduler() {
            _log = _context.logManager().getLog(NullScheduler.class);
        }
        
        public void eventOccurred(Connection con) {
            _log.log(Log.ERROR, "Yell at jrandom: Event occurred on " + con, new Exception("source"));
        }
        public boolean accept(Connection con) { return true; }
    };
}