Package org.nutz.mvc.upload.speed

Source Code of org.nutz.mvc.upload.speed.UploadMonitor

package org.nutz.mvc.upload.speed;

import java.io.PrintStream;

import javax.servlet.http.HttpSession;

import org.nutz.lang.Lang;
import org.nutz.mvc.upload.UploadInfo;
import org.nutz.trans.Atom;

public class UploadMonitor implements Atom {

    private HttpSession session;
    private PrintStream out;
    private long interval;
    private Object lock;
    private boolean done;

    public UploadMonitor(Object lock, HttpSession session, PrintStream out, long interval) {
        this.lock = lock;
        this.session = session;
        this.out = out;
        this.interval = interval;
    }

    public UploadMonitor stop() {
        done = true;
        synchronized (lock) {
            lock.notifyAll();
        }
        return this;
    }

    public void run() {
        while (!done) {
            try {
                UploadInfo info = (UploadInfo) session.getAttribute(UploadInfo.SESSION_NAME);
                if (null == info) {
                    out.print('.');
                    synchronized (lock) {
                        lock.wait(interval);
                    }
                    continue;
                }
                out.printf(    "\n > %6s%% : %10d / %d",
                            (info.current / (info.sum / 100)),
                            info.current,
                            info.sum);
                synchronized (lock) {
                    lock.wait(interval);
                }
            }
            catch (InterruptedException e) {
                throw Lang.wrapThrow(e);
            }
        }
        out.printf("\n > %6s%%\n", 100);
    }
}
TOP

Related Classes of org.nutz.mvc.upload.speed.UploadMonitor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.